SpringBoot2.X版本使用druid连接池报ClassNotFound异常原因及解决办法

SpringBoot2.0以上版本删除了RelaxedDataBinder相关类(详情可以自行百度),使用druid连接池时如果使用较低版本,例如


    com.alibaba
    druid-spring-boot-starter
    1.1.0

会报异常

java.lang.ClassNotFoundException: org.springframework.boot.bind.RelaxedDataBinder

所以如果使用propertie或者yml配置,例如:

spring.datasource.dataSourceClassName = com.alibaba.druid.pool.DruidDataSource
spring.datasource.driverClassName = com.mysql.jdbc.Driver
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/demo
spring.datasource.username = root
spring.datasource.password = root

或者

spring.datasource:
  url: jdbc:mysql://127.0.0.1:3306/demo
  username: root
  password: root
  driverClassName: com.mysql.jdbc.Driver
  type: com.alibaba.druid.pool.DruidDataSource

这种可以直接加载生效的配置,就需要把druid-spring-boot-starter依赖去掉,或者升到1.1.10版本;

如果是用bean的方式加载配置,例如:

jdbc.dataSourceClassName = com.alibaba.druid.pool.DruidDataSource
jdbc.driverClassName = com.mysql.jdbc.Driver
jdbc.url = jdbc:mysql://127.0.0.1:3306/demo
jdbc.username = root
jdbc.password = root

然后配置一个bean:

@Configuration
public class DataSourceConfig {

    @Bean
    @ConfigurationProperties("jdbc")
    public DataSource dataSource() {
        return new DruidDataSource();
    }
}

就不会出现版本过低导致类文件缺失的问题。

PS:本文采用的Apollo配置中心。

你可能感兴趣的:(SpringBoot)