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

动态数据源作为Spring Boot Hibernate中的第二个数据源

经慈
2023-03-14

我有一个关于如何在Spring Boot应用程序中处理两个不同数据源的问题。

用例:

我有一个必须始终连接的主存储库(db)(应用程序范围),我对此没有问题,有TransactionManager和EntityManager。

第二个数据库连接应该只有请求范围,并从httpRequest收集动态凭据。

数据源都来自PostgreSQL。

这可能吗?如果可能,实现这一目标的最佳方法是什么?

谢谢你的帮助。

共有1个答案

阴迪
2023-03-14

这是两个数据源模式上的一个有趣的转折!

您的第二个数据源必须根据应用程序外部的信息进行解析,因此您将无法使用Spring应用程序上下文。

您可以在Spring中以编程方式配置数据源,这将在本Q中介绍

在Spring Boot中以编程方式配置数据源

您的情况略有不同,因为凭据将在运行时解析,但可以使用相同的想法。

  1. 确保您具有Spring JDBC依赖项。
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
public DataSource getDataSource(String user, String password) {
    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
    dataSourceBuilder.url(DBB_URL);
    dataSourceBuilder.username(user);
    dataSourceBuilder.password(password);
    return dataSourceBuilder.build();   
}

然后将其用作代码的数据源。您将无法自动连接它,因此您将提出一个合理的策略,用于何时在JDBC方法中构建数据源,并将其与Spring JdbcTemplate一起使用,以允许您实现所需的事务完整性。

您还没有指定其他注意事项。此策略假设您对两个数据源使用相同的JDBC驱动程序。如果您使用不同的数据库,则必须添加这些库的依赖项,然后为您的动态数据源指定驱动程序类。

 类似资料:
  • 问题内容: 对不起,我的英语不好。我为AbstractRoutingDataSource编写了实现: 我创建了用于在数据库之间进行切换的新类: 其中DatabaseType为: 在我的beans.xml中: 现在,当我尝试更改DAO中的数据源时: 首次执行getJdbcTemplate()时,一次调用一次defineCurrentLookupKey(),并且数据源不会切换。 问题答案: Sprin

  • 如 动态 Inventory 所介绍,ansible可以从一个动态的数据源获取到inventory信息,包含云端数据源 怎么写一个自己的数据源? 很简单!我们仅仅需要创建一个在适当参数下,能够返回正确JSON格式数据的脚本或者程序,你可以使用任何语言来实现. 脚本规范 当我们在外部使用``–list``参数调用这个脚本时,这个脚本必须返回一个JSON散列/字典,它包含所管理的所有组.每个组的val

  • 问题内容: 我有一个Spring应用程序,我想动态更改数据源。当输入DS URL时,Spring Bean和所有依赖项将自动更新。我知道这有些奇怪,但是无论如何我都想实现。我的Spring配置如下: 问题是: JDBC URL存储在属性中,可以在运行时更改它。 更改URL后,我需要重新创建数据源,可能还需要重新创建相关对象。我不知道Spring如何优雅地做呢? 我知道Spring确实可以基于一个键

  • 我有一个Spring应用程序,我想动态更改数据源,即。当输入DS URL时,Spring bean和所有依赖项将自动更新。我知道这有点奇怪,但无论如何我想实现这一点。我的Spring配置如下: 问题是: > 一旦URL被更改,我需要重新创建数据源,可能还有依赖对象。我不知道如何在Spring优雅地做这件事? 我知道Spring可以基于一个键动态路由数据源,但数据源URL是在Spring中预定义的,

  • 我有两个火花数据集,其中一个列的帐户和键,键列在数组的格式[key1, key2, key3...]和另一个数据集的两个列的帐户和键值是在json.帐户,{key:值,键,值...}。我需要更新第二个数据集中的值,如果键出现在第一个数据集中。 预期产出

  • 我正在使用Spring Boot和Spring数据,我想主要使用MySQL数据源,但如果连接失败,请转到H2数据源。 到目前为止,我只是在配置中移动@Primary,但如果我将@Primary放入MySQL(主数据源)并停止我电脑中的MySQL服务器,另一个bean就不会出现了。。。我需要什么? 谢谢!