@Bean @ConfigurationProperties(prefix = "ds2") public DataSource dataSource(){ return DataSourceBuilder.create().build(); }
为什么生成数据源的时候,没有自动把配置文件的参数带进去啊?是我哪里设置错了么?
1
luxinfl OP @Bean
@ConfigurationProperties(prefix = "spring.datasource.hikari") public DataSource dataSource(){ return DataSourceBuilder.create().build(); } |
2
luxinfl OP ds2.jdbcUrl=
ds2.username=feb-dev ds2.password=feb-dev ds2.driverClassName=com.mysql.cj.jdbc.Driver |
3
luxinfl OP @ConfigurationProperties(prefix = "ds2") 注解是这个、。。
|
4
wangyanrui 2020-04-30 16:29:44 +08:00
Binding is either performed by calling setters on the annotated class or, if {@link ConstructorBinding @ConstructorBinding} is in use, by binding to the constructor parameters.
来自于 源码里备注的一部分 你的 datasource 里面,有 ds2 这个属性吗? |
5
luxinfl OP @wangyanrui 那如果要绑定 hikari 的参数,那应该怎么写?
|
6
liyanggyang 2020-04-30 16:33:06 +08:00
大哥,首先 启动类需要 @EnableConfigurationProperties;其次自动注解是解析 @Bean 的入参类;最后,也是根据成员变量的 setter ( DataSourceBuilder 的 username 这些,不是 DataSourceBuilder 的成员变量);
-------我觉得可以这样---- 1. 启动类 @EnableConfigurationProperties({ DataProperties.class, }) 2. 配置类: @Setter @Getter @AllArgsConstructor @NoArgsConstructor @Builder @ConfigurationProperties(prefix = "ds2") public class DataProperties { private String username; 。。。 } 3. 注册 bean @Bean public DataSource dataSource(DataProperties dataProperties){ return DataSourceBuilder.create().username(dataProperties.getUserName).build(); } |
7
Resource 2020-04-30 16:37:30 +08:00
DataSourceProperties 有 jdbcUrl 这个属性吗,我咋记得是 url
|
8
luxinfl OP @liyanggyang 我觉的 setter 应该不需要,因为这样写我可以获取到配置信息
@Configuration @PropertySource(value= "classpath:application-ds.yml",factory = PropertySourceConfig.class) @EnableConfigurationProperties public class TransactionConfig { @Bean @ConfigurationProperties(prefix = "ds2") public DataSource dataSource() { return DataSourceBuilder.create().build(); } } |
10
luxinfl OP @wangyanrui ds2 前面加了 prefix,只是配置的前缀
|
11
wangyanrui 2020-04-30 16:51:07 +08:00
没有明白楼主到底要表达的是什么意思(手动沟通)
|
12
wangyanrui 2020-04-30 16:51:17 +08:00
没有明白楼主到底要表达的是什么意思(手动狗头)
|
13
wangyanrui 2020-04-30 16:54:00 +08:00
感觉楼主可能对 SpringBoot 的自动配置的原理不太明白,云里雾里的
建议先了解一些基本概念 说错了勿锤 |
14
luxinfl OP @wangyanrui 是不太懂,但是为啥我换了个写法就能读取到了呢?
@Configuration @PropertySource(value= "classpath:application-ds.yml",factory = PropertySourceConfig.class) @EnableConfigurationProperties public class TransactionConfig { @Bean @ConfigurationProperties(prefix = "ds2") public DataSource dataSource() { return DataSourceBuilder.create().build(); } } |
15
chendy 2020-04-30 16:58:12 +08:00
DataSource 不吃这些配置,应该返回 DataSourceProperties 或者 HIkari 的配置类,配置参数才能加上去
然后再注入给相关的 bean |
17
Jrue0011 2020-04-30 17:08:30 +08:00
自己测了下,单数据源用你主楼贴的写法没什么问题,可能是多数据源结合自动配置后的问题
|
18
luxinfl OP 我又试了下。 @ConfigurationProperties 可以直接读到 application.properties 或者 application.yml 配置文件。但是如果数据源配置写在自定义文件的时候,要么用 @PropertySource 读取自定义配置文件,要么在主配置文件配置 spring.profiles.include..谢谢大佬们提供意见
@Jrue0011 @liyanggyang @wangyanrui |