【问题标题】:spring boot assign specific DataSource to JpaRepositoryspring boot 将特定的 DataSource 分配给 JpaRepository
【发布时间】:2017-12-11 22:03:54
【问题描述】:

我有两个数据源,我正在尝试为每个 JpaRepositories 分配一个特定的数据源。我正在使用弹簧启动框架。大约 90% 的时间使用主数据源,而使用大约 10% 的辅助数据源,因此最好默认为主数据源并仅在需要时分配辅助数据源。我尝试在这里使用文档 https://docs.spring.io/spring-boot/docs/current/reference/html/howto-data-access.html ,但我认为这并不是我所需要的。任何提示都会很棒!

spring.datasource.configuration.url=jdbc:postgresql://localhost:5432/mydatabase
spring.datasource.configuration.username=dockerusername
spring.datasource.configuration.password=dockerpassword
spring.datasource.configuration.driver-class-name=org.postgresql.Driver

spring.datasource.cached.url=jdbc:hsqldb:mem:main
spring.datasource.cached.driver-class-name=org.hsqldb.jdbc.JDBCDriver

spring.datasource.initialize=false
spring.jpa.database=default
spring.jpa.hibernate.ddl-auto=update

配置文件

@Configuration
@ComponentScan({"com.praeses.gov"})
public class Config {
@Bean
@ConfigurationProperties("spring.datasource.configuration")
public DataSourceProperties configDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@ConfigurationProperties("spring.datasource.configuration")
public DataSource configDataSource() {
    return configDataSourceProperties().initializeDataSourceBuilder().build();
}

@Bean
@Primary
@ConfigurationProperties("spring.datasource.cached")
public DataSourceProperties cachedDataSourceProperties() {
    return new DataSourceProperties();
}

@Bean
@Primary
@ConfigurationProperties("spring.datasource.cached")
public DataSource cachedDataSource() {
return cachedDataSourceProperties().initializeDataSourceBuilder().build();
    }

使用主数据源的存储库

@Qualifier("spring.datasource.cached")
@Repository("spring.datasource.cached")
public interface GeoitemRepository extends JpaRepository<Geoitem, String> {
}

使用辅助数据源的存储库

@Qualifier("spring.datasource.configuration")
@Repository("spring.datasource.configuration")
public interface GeoitemhistoryRepository extends JpaRepository<Geoitemhistory, String> {
}

【问题讨论】:

    标签: java spring-boot spring-data-jpa


    【解决方案1】:

    您可以在与以下链接类似的行上做一些事情。只需创建两个配置文件而不是一个(每个数据源一个)并将它们都添加到您的主应用程序中。

    另外,在属性文件中,如下所示:

    datasource.local.url=
    datasource.local.driver-class-name=
    datasource.local.username=
    datasource.local.password=
    
    datasource.primary.url=
    datasource.primary.driver-class-name=
    datasource.primary.username=
    datasource.primary.password=
    

    另外,在主数据源的配置文件中为LocalContainerEntityManagerFactoryBeanplatformTransactionManager 提供@Primary 注释。

    有关详细信息,请参阅此答案: https://stackoverflow.com/a/44971911/6775742

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-16
      • 1970-01-01
      • 2019-03-15
      • 2020-03-09
      • 1970-01-01
      • 2020-10-30
      • 1970-01-01
      • 2014-09-07
      相关资源
      最近更新 更多