@ConfigurationProperties注解不生效?原理解读

这是在配置数据源引发的问题,@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没有勾选环境配置导致没编译进去

总的来说就是外部原因导致的,多排查一些

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值