java - spring boot将特定的DataSource分配给JpaRepository

标签 java spring-boot spring-data-jpa

我有两个数据源,我试图为每个 JpaRepositories 分配一个特定的数据源。我正在使用 Spring Boot 框架。主数据源的使用率约为 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> {
}

最佳答案

您可以按照与以下链接类似的方式执行某些操作。只需创建两个配置文件而不是一个(每个数据源各一个)并将它们添加到您的主应用程序中。

此外,在属性文件中,给出如下:

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

关于java - spring boot将特定的DataSource分配给JpaRepository,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44973613/

相关文章:

java - 简单的Java 2D游戏-恢复游戏

mysql - Spring数据JPA与MySQL服务器: case is ignored on Entity class by default

postgresql - 使用 Hibernate 和 Spring Data JPA 选择特定列时出现异常

java - 我如何以编程方式为 Spring Boot 和 Tomcat 提供 keystore 文件?

SpringBoot JPA 存储库保存方法不起作用

java - Autowired 带注释的 bean 在 Listener 类中获取 null

java - Java 8 DateTimeFormatters 常量在哪里定义?

java - 正确的交互式网站系统设计理念/方法?

java - 如何在 roboguice 2.0 中注入(inject) LocationManager?

spring-boot - 如何在 spring/stomp websocket 中推送注销用户或刷新用户页面