springboot项目初始化druid连接池时报错java.lang.NullPointerException: null

原创 2020-04-27 18:25 阅读(5760)次

新创建了一个springboot项目,一顿配置,以为能正常启动,结果打脸了,报错了:

  1. 2020-04-27 18:14:04.655 ERROR 18376 --- [ main] com.alibaba.druid.pool.DruidDataSource : {dataSource-1} init error
  2. java.lang.NullPointerException: null
  3. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:325) ~[na:1.8.0_191]
  4. at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[na:1.8.0_191]
  5. at com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:589) ~[druid-1.1.9.jar:1.1.9]
  6. at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:815) [druid-1.1.9.jar:1.1.9]
  7. at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1227) [druid-1.1.9.jar:1.1.9]
  8. at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:1223) [druid-1.1.9.jar:1.1.9]
  9. at com.alibaba.druid.pool.DruidDataSource.getConnection(DruidDataSource.java:90) [druid-1.1.9.jar:1.1.9]
  10. at org.springframework.jdbc.datasource.DataSourceUtils.fetchConnection(DataSourceUtils.java:158) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  11. at org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:116) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  12. at org.springframework.jdbc.datasource.DataSourceUtils.getConnection(DataSourceUtils.java:79) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  13. at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:612) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  14. at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:669) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  15. at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:700) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  16. at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:712) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  17. at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:763) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  18. at org.springframework.jdbc.core.JdbcTemplate.queryForList(JdbcTemplate.java:844) [spring-jdbc-5.2.5.RELEASE.jar:5.2.5.RELEASE]
  19. at com.tianlong.server.messageserver.dao.impl.BusinessConfigDaoImpl.getNeedRunBusinessConfigList(BusinessConfigDaoImpl.java:24) [classes/:na]

如上报错信息显示在com.alibaba.druid.util.JdbcUtils.createDriver(JdbcUtils.java:589)中创建连接数据库的驱动时空指针了,Debug了之后才发现配置类有问题。

配置类代码如下:

  1. @Bean
  2. @ConfigurationProperties(prefix="spring.datasource")
  3. public DataSource dataSource() {
  4. DruidDataSource druidDataSource = new DruidDataSource();
  5. return druidDataSource;
  6. }

  1. prefix少了druid节点,正确配置为
  2. @ConfigurationProperties(prefix="spring.datasource.druid")
  3. 贴上我的配置application.yml
  4. spring:
  5.   application:
  6.     name: tianlong
  7.   datasource:
  8.     name: tianlong
  9.     type: com.alibaba.druid.pool.DruidDataSource
  10.     #druid相关配置
  11.     druid:
  12.       #监控统计拦截的filters
  13.       filters: stat
  14.       #driver-class-name: com.mysql.cj.jdbc.Driver
  15.       driver-class-name: org.postgresql.Driver
  16.       #基本属性
  17.       url: jdbc:postgresql://localhost:5432/postgres
  18.       username: postgre
  19.       password: 123456!@#
  20.       #配置初始化大小/最小/最大
  21.       initial-size: 1
  22.       min-idle: 1000
  23.       max-active: 5000
  24.       #获取连接等待超时时间
  25.       max-wait: 60000
  26.       #间隔多久进行一次检测,检测需要关闭的空闲连接
  27.       time-between-eviction-runs-millis: 60000
  28.       #一个连接在池中最小生存的时间
  29.       min-evictable-idle-time-millis: 300000
  30.       validation-query: SELECT 'x'
  31.       test-while-idle: true
  32.       test-on-borrow: false
  33.       test-on-return: false
  34.       #打开PSCache,并指定每个连接上PSCache的大小。oracle设为true,mysql设为false。分库分表较多推荐设置为false
  35.       pool-prepared-statements: false
  36.       max-pool-prepared-statement-per-connection-size: 20
    -------
    -------

    如果你还有其他问题,推荐你看看这本书
    Java微服务架构实战(SpringBoot+SpringCloud+Docker+RabbitMQ
    名字好长啊,里面有讲到
    spring boot集成druid,或者能帮到你