当前位置: 首页 > 知识库问答 >
问题:

在运行时更改Spring配置连接

江阳冰
2023-03-14

我需要在运行时更改与数据库的连接。例如,如果请求的参数是BD1,则连接数据库1,如果是BD2,则连接数据库2,等等。

我用的是Spring靴。最好的方法是什么。

我有这个@Configuration,但不知道说我的存储库如何使用。

@Configuration
public class DataSourceConfiguration {

    @Bean(name = "ccteste")
    @ConfigurationProperties("spring.ciclocairu.teste.datasource")
    @Primary
    public DataSource ciclocairuTeste() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "ccprod")
    @ConfigurationProperties("spring.ciclocairu.prod.datasource")
    public DataSource ciclocairuProd() {
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "tmccteste")
    @Autowired
    @Primary
    DataSourceTransactionManager transactionManagerCicloCairuTeste(@Qualifier("ccteste") DataSource datasource) {
        DataSourceTransactionManager txm = new DataSourceTransactionManager(datasource);
        return txm;
    }

    @Bean(name = "tmccprod")
    @Autowired
    @Primary
    DataSourceTransactionManager transactionManagerCicloCairuProd(@Qualifier("ccprod") DataSource datasource) {
        DataSourceTransactionManager txm = new DataSourceTransactionManager(datasource);
        return txm;

    }
}

共有2个答案

闾丘博超
2023-03-14

请看一下我在管理具有多个数据源的事务、相同应用程序代码的实体管理器方面的回答

或者我的博文:使用Spring Boot、JPA、Hibernate和Postgres的多租户应用程序

贺刚毅
2023-03-14

看起来您正在寻找一些数据源路由。Spring有AbstractRoutingDataSource用于运行时检测应该使用什么数据源。

基于查找键将getConnection()调用路由到各种目标数据源之一的抽象数据源实现。

您还可以通过setDefaultTargetDataSource方法设置默认数据源。

它的工作方式是:在bean配置阶段,将所需的数据源放在AbstractRoutingDataSource的映射中,当需要使用特定的数据源时,将该源的键放在链接到路由器的上下文中。此ds键链接到当前线程

以下是示例:带Spring的动态数据源路由和Spring数据源路由

 类似资料:
  • 问题内容: 我想向管理界面公开一些(特定于应用程序的)设置,以便用户可以轻松地更改它们,也不必重新启动Django。 我应该怎么做? 我在http://djangopackages.com/grids/g/live-setting/上签出了应用程序(btw django-constance最吸引人),但实际上所有这些应用程序所做的就是将值存储在数据库中,从而提供了一个网站。界面来更改它们,并进行缓

  • 我在Spring框架中使用ehcache。我正在使用ehcache.xml初始化ehcache。然而,我想在运行时添加某些属性,如terracottaconfig。为此,我覆盖了类EhCacheManagerFactoryBean。目前,我正在覆盖这个类的方法getObject()(我不知道这是否是一个正确的覆盖,因为在使用ehcache.xml文件初始化类之前,调用了其他方法setResourc

  • 我使用Spring初始值设定项创建了一个新的Spring Boot项目。我正在构建一个内部部署后端,所以我试图实现的是,当用户打开jar可执行文件并启动服务器时,他应该能够通过在他的web浏览器中转到localhost:8080/来配置数据库连接。基本上是索引。html将有一个包含IP地址、数据库名称、用户名和密码4个字段的表单。提交表单后,spring将尝试使用提供的信息连接到数据库。 我拥有所

  • 我正在使用Spring云流和Kafka绑定器使用SASL连接到Kafka集群。SASL配置如下所示: 我想以编程方式/在运行时更新用户名和密码,如何在Spring Cloud Stream中使用Spring Kafka binders做到这一点? 旁注:使用BinderFactory,我可以在其hashmap中看到这些配置,但我想知道如何在运行时更新配置,以便这些更改也反映在连接中?

  • 问题内容: 作为Java开发人员,我经常需要在接口的不同实现之间进行选择。有时, 一次 只能进行 一次 选择,而另一些时候,我需要不同的实现来响应程序收到的不同输入。换句话说,我需要能够在运行时 更改 实现。这可以通过一个帮助器对象轻松实现,该对象将一些键(基于用户输入)转换为对适当接口实现的引用。 使用Spring,我可以将这样的对象设计为Bean,然后将其注入到需要的地方: 现在,我应该如何实

  • 问题内容: 我需要以固定的间隔运行批处理作业,并且能够在运行时更改此批处理作业的时间。为此,我遇到了Spring框架下提供的@Scheduled注释。但是我不确定如何在运行时更改fixedDelay的值。我进行了一些谷歌搜索,但没有发现任何有用的信息。 问题答案: 在spring启动中,你可以直接使用应用程序属性! 例如: 请注意,如果未定义属性,你还可以具有默认值,例如,默认值为“ 60”(秒)