首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Spring :如何避免为相同的数据库创建多个存储库?

Spring :如何避免为相同的数据库创建多个存储库?
EN

Stack Overflow用户
提问于 2017-02-08 00:03:25
回答 1查看 793关注 0票数 0

我的spring引导mvc项目通过存储库接口与数据库进行交互,该接口使用Spring默认配置很好地工作:

代码语言:javascript
复制
    spring:
       datasource:
       url: jdbc:mysql://localhost/some_schema
       username: 
       ...

    @Configuration
    @EnableJpaRepositories(basePackages = {"my.path.to.repository"})
    public class Application extends WebMvcConfigurerAdapter {
    ....

现在,根据某些运行时条件,我需要在一个单独的位置与相同的第二个数据库(相同的模式)进行交互。我发现的解决方案都指向根据数据源创建单独的存储库包。

但是,由于数据库是相同的,那么是否有一种优雅的方法可以避免对每个添加的数据源重复存储库包?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-02-08 04:29:09

您可以通过Spring AbstractRoutingDataSource来完成这一任务。

大致如下:

代码语言:javascript
复制
public class ChooseOneDataSource extends AbstractRoutingDataSource {
    @Override
    protected Object determineCurrentLookupKey() {
        if (***some runtime condition***) {
          return "dataSource1";
        } else {
          return "dataSource2";
        }
    }
}

在你的拥堵中:

代码语言:javascript
复制
@Bean 
@ConfigurationProperties(prefix = "dataSource1")
DataSource dataSource1() {
 return DataSourceBuilder.create().build();
}

@Bean
@ConfigurationProperties(prefix = "dataSource2")
DataSource dataSource2() {
 return DataSourceBuilder.create().build();
}

@Bean
DataSource dataSource() {
 AbstractRoutingDataSource dataSource = new ChooseOneDataSource();
 Map<Object,Object> resolvedDataSources = new HashMap<>();
 resolvedDataSource.put("dataSource1", dataSource1());
 resolvedDataSource.put("dataSource2", dataSource2());
 dataSource.setDefaultTargetDataSource(dataSource1()); // << default
 dataSource.setTargetDataSources(resolvedDataSources);
 return dataSource;
}

欲了解更多信息/示例:

http://fizzylogic.nl/2016/01/24/Make-your-Spring-boot-application-multi-tenant-aware-in-2-steps/ https://spring.io/blog/2007/01/23/dynamic-datasource-routing/

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42102313

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档