java - Spring Boot JPA 设置自定义数据源

标签 java spring-boot datasource

我定义了 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 em1em2 每个使用不同的 DataSource
  • 定义两个TransactionManagers
  • 将所有应该使用第一个DataSource的仓库放入包pkg1,将其他仓库放入包pkg2
  • 使用 @EnableJpaRepositoriesbasePackages = "pkg1"entityManagerFactoryRef = "em1" 定义一个 @Configuration 类>
  • pkg2em2 添加第二个 @Configuration

它在the Spring Boot documentation - 8.2 Configure Two DataSources中有描述.

关于java - Spring Boot JPA 设置自定义数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53934077/

相关文章:

java - 仅来自 JDK 的类型层次结构

java - Java中如何使用静态扩展变量?

spring - 没有可用的 'org.springframework.boot.web.reactive.context.ReactiveWebApplicationContext' 类型的合格 bean

oracle - 使用 Jboss 和 JPA( hibernate )配置 JDBC oracle 特定属性 v$session.program

java - 如何从图像生成avi视频?

spring-boot - Jooq Java API,在选择查询中将日期时间转换为时区

尝试使用 Thymeleaf 加载 HTML 文件时出现 Spring Boot 404

ios - 将 UITableView 委托(delegate)和数据源与 tableViewController 分离

Visual Studio 2012 中的 SQLite 1.0.82.0(最新)未显示在设计器数据源中

java - 匿名类的构造函数的访问修饰符是什么?