我有一個安裝我的彈簧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