我有兩個Spring Boot應用程式App1和App2。App2可以作為一個獨立的應用程式運行,也可以作為一個依賴項嵌入到應用程式App1。我希望App1能夠呼叫App2的服務,后者會對不同的資料庫進行 repo 呼叫。
App1
@Configuration
@EnableJpaRepositories(basePackages = "com.ev.app1.repositories",
entityManagerFactoryRef = "app1EntityManagerFactory",
transactionManagerRef = "app1TransactionManager")。
public class PersistenceApp1Configuration {
@Bean
@ConfigurationProperties(prefix = "app.datasource.app1")
public DataSourceProperties app1DataSourceProperties() {
return new DataSourceProperties()。
}
@Bean(name = "app1DataSource")
@ConfigurationProperties(prefix = "app.datasource.app1")
public DataSource tmDataSource() {
return tmDataSourceProperties() .initializeDataSourceBuilder()
.type(BasicDataSource.class).build()。
}
App1 application.properties:
app.datasource.app1.url=jdbc:postgresql:/localhost:5432/mercury_tmdb? currentSchema=txm
app.datasource.app1.username=postgres
app.datasource.app1.password=root
app.datasource.app1.driverClassName=org.postgresql.Driver
App2
@Configuration
@EnableJpaRepositories(basePackages = "com.ev.app1.repositories",
entityManagerFactoryRef = "app1EntityManagerFactory",
transactionManagerRef = "app1TransactionManager")。
public class PersistenceApp1Configuration {
@Bean
@ConfigurationProperties(prefix = "app.datasource.app1")
public DataSourceProperties app1DataSourceProperties() {
return new DataSourceProperties()。
}
@Bean(name = "app2DataSource")
@Primary
@ConfigurationProperties(prefix = "app.datasource.app2")
public DataSource app2DataSource() {
return tmDataSourceProperties().initializeDataSourceBuilder()。
.type(BasicDataSource.class).build()。
}
App2 application.properties:
app.datasource.app2.url=jdbc:postgresql:/localhost:5432/mercury_cldb? currentSchema=led
app.datasource.app2.username=postgres
app.datasource.app2.password=root
app.datasource.app2.driverClassName=org.postgresql.Driver
正如你所看到的,我不得不將App2中的DataSource Bean標記為@Primary以覆寫默認的spring datasource。但是我不能對App1做同樣的事情,因為它已經有一個來自App2的Primary Bean。有什么辦法解決這個問題嗎?或者是我的方法完全錯誤?
注意:我還有其他的配置豆,我沒有在這里展示,但如果需要的話,我可以與大家分享
。
uj5u.com熱心網友回復:
你可以使用Spring的條件Bean配置,所以你可以決定何時使用每個資料源。
你可以這樣使用注解:
@ConditionalOnExpression(value = "${module.enabled} and ${module.submodule.enabled}")
取決于你的具體配置。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/325786.html
標籤:
