这是在配置数据源引发的问题,@ConfigurationProperties配置不生效,报错数据源创建缺失jdbcUrl,driverClassName之类的错误,但是我这确实配置了这些参数。
@Bean("master")
@ConfigurationProperties(prefix = "spring.datasource.dynamic.datasource.master")
public DataSource masterDatasource(){
return DataSourceBuilder.create().build();
}
spring:
datasource:
dynamic:
datasource:
master:
url: jdbc:oracle:thin:@192.168.137.1:1521:xe
username: admin
password: admin
driver-class-name: oracle.jdbc.OracleDriver
总觉得是这个注解的问题,源码查询结果如下:
-- 入口 ConfigurationPropertiesBindingPostProcessor 60行
-- 遍历配置文件的内部属性 Binder 214行
-- 获取配置值 Binder 134行
-- 设置值 JavaBeanBinder 77行
发现它是能拿到配置文件的属性值的,其内部原理不是将配置信息写入bean对象,而是遍历bean对象的属性,通过属性名称在配置中找是否配置了属性,也会转驼峰等操作。
那就是其他外部情况导致的,不是该注解的原因。
我总结的原因如下:
1、上面数据源创建缺失参数的原因是配置文件里少配置了参数或者参数名错误
spring默认用了HikariDataSource,而他需要的是jdbc-url而不是url,导致每次都在报错缺少jdbcUrl,而自以为配上了url
2、比如你配置在application-dev.yml中,请确认编译后了target/classes里面有没有这个配置文件。我这里就是因为idea没有勾选环境配置导致没编译进去
总的来说就是外部原因导致的,多排查一些