我定义了 2 个数据源-
#datasource jndi setup
database.datasources[1].jndi-name=jdbc/yyyy
database.datasources[1].username=yyyy
database.datasources[1].password=yyyyy
database.datasources[1].url=jdbc:oracle:thin:@localhost:2222:webtst
database.datasources[1].driverClassName=oracle.jdbc.OracleDriver
database.datasources[1].factory=org.apache.tomcat.jdbc.pool.DataSourceFactory
database.datasources[1].initialSize=1
database.datasources[1].maxActive=5
database.datasources[0].jndi-name=jdbc/xxx
database.datasources[0].username=xxx
database.datasources[0].password=xxxx
database.datasources[0].url=jdbc:oracle:thin:@localhost:2222:webtst
database.datasources[0].driverClassName=oracle.jdbc.OracleDriver
database.datasources[0].factory=org.apache.tomcat.jdbc.pool.DataSourceFactory
database.datasources[0].initialSize=1
database.datasources[0].maxActive=15
还有 2 个匹配的 JPA 存储库,在我将其中一个定义为 @Primary 之后,如何将其中一个设置为使用不同的 ds(不是主要的 ds):
@Bean
@Primary
DataSource dataSource() throws SQLException {
OracleDataSource dataSource = new OracleDataSource();
dataSource.setUser(xusername);
dataSource.setPassword(xpassword);
dataSource.setURL(xurl);
dataSource.setImplicitCachingEnabled(true);
dataSource.setFastConnectionFailoverEnabled(true);
return dataSource;
}
@Bean
DataSource propsDataSource() throws SQLException {
OracleDataSource propsDataSource = new OracleDataSource();
//propsDataSource.setDataSourceName(secJNDIName);
propsDataSource.setUser(yUserName);
propsDataSource.setPassword(ypropsPassword);
propsDataSource.setURL(upropsUrl);
propsDataSource.setImplicitCachingEnabled(true);
propsDataSource.setFastConnectionFailoverEnabled(true);
return propsDataSource;
}
还有一个简单的 JpaRepository,我希望它使用二级数据源:
public interface AttributesRepo extends JpaRepository<PRODUCTATTRIBUTE, PRODUCTATTRIBUTE_KEY> {
}
最佳答案
你需要:
- 定义两个
DataSource
- 将其中一个标记为
@Primary
(就像您所做的那样) - 定义两个
LocalContainerEntityManagerFactoryBean
em1
和em2
每个使用不同的DataSource
- 定义两个
TransactionManagers
- 将所有应该使用第一个
DataSource
的仓库放入包pkg1
,将其他仓库放入包pkg2
- 使用
@EnableJpaRepositories
和basePackages = "pkg1"
和entityManagerFactoryRef = "em1"
定义一个@Configuration
类> - 为
pkg2
和em2
添加第二个@Configuration
类
它在the Spring Boot documentation - 8.2 Configure Two DataSources中有描述.
关于java - Spring Boot JPA 设置自定义数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53934077/