我有一个安装我的弹簧web应用程序,其中有两个数据源,主数据源和辅助数据源。这两个数据源主要共享除用户名,密码和url之外的所有配置属性。随着公共属性列表的增长,我希望为这两个数据源使用通用配置属性,并且只指定为次要数据源和其他数据源重写哪些属性。例如,我有我的设置主要数据来源豆这样的:带重复属性的Spring引导多个数据源
@Bean
@Primary
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
在二级数据来源:
@Value("${spring.secondaryDatasource.url}")
private String databaseUrl;
@Value("${spring.datasource.username}")
private String username;
@Value("${spring.datasource.password}")
private String password;
@Value("${spring.datasource.driver-class-name}")
private String driver;
@Bean
public DataSource secondaryDataSource() {
return DataSourceBuilder
.create()
.url(databaseUrl)
.username(username)
.password(password)
.driverClassName(driver)
.build();
}
我还设置一个例子项目,类似于我的当前设置: https://github.com/Edvinas01/MultipleDatasources
是否有可能注入重复属性,如驱动程序名称和其他人,而只指定重写?像这样的东西(这不起作用):
@Bean
@ConfigurationProperties(prefix = "spring.datasource") // Inject default properties
public DataSource secondaryDataSource() {
return DataSourceBuilder
.create()
.url(databaseUrl) // Override url
.username(username) // Override username
.password(password) // Override password
.build();
}
编辑:
我已经更换了我的属性文件,以.yml配置文件像这样:
spring:
jpa.hibernate.ddl-auto: update
datasource:
username: main
password: main
url: jdbc:hsqldb:mem:main
driver-class-name: org.hsqldb.jdbc.JDBCDriver
---
spring:
profiles: secondary
datasource:
username: secondary
password: secondary
url: jdbc:hsqldb:mem:secondary
---
spring:
profiles.active: default,secondary
而且数据来源豆:
@Bean
@Primary
@Profile("default")
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}
@Bean
@Profile({"secondary", "default"})
@ConfigurationProperties(prefix = "spring.datasource")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
我的主要数据源(默认)获取th除次级配置文件配置中未指定的驱动程序之外的辅助数据源值。辅助数据源获取正确的属性。
有没有可能的解决方案,没有使用.yml格式进行配置,或者不必为每个配置文件创建多个.applications文件?
EDIT2: 一些澄清,对我们的设置,我们有当前的属性文件:
application.properties (sets the active profile according to the machine and common properties)
application-stating.properties (staging machine)
application-production.properties (production machine)
两个临时和生产环境必须使用两个数据源,所以分期有两个数据源(主,辅)并且生产有两个数据源(主要的,次要的)。主数据源和辅助数据源之间共享驱动程序等设置以及其他数据。尝试将这些公共属性注入第二个数据源时出现问题。
我忘了补充一点,我们已经建立了几个配置文件,一个用于临时和生产,我觉得有几个配置文件将局势更加复杂化。我想要实现的是减少配置文件和属性。 – Edd
我测试过了你的建议,但我不能让它与.yml配置文件时,可能为时已晚......一开始我想用一个单一的属性文件去关闭,只是注入主数据源属性转换为辅助数据源配置类或沿着这些行的某些内容以避免创建多个文件。对于多个配置文件,我们根据凡申请是通过上.properties文件运行的服务器,为你的要求.yml – Edd
加入进一步的解释只是使用一个配置文件,因此不喜欢设置环境 – mchlfchr