微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

使用案例:

I have one main repository (db) which must be connected all the time
(application scope), i have no problem with that, having
TransactionManager and EntityManager.

The second database connection should be only request scoped, with
dynamic credentials gathered from an httpRequest.

数据源都来自PostgreSQL.

这甚至可能吗?如果是,那么实现这一目标的最佳方式是什么.

感谢帮助.

解决方法:

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

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

您可以在Spring中以编程方式配置数据源,本Q& A中对此进行了介绍:

Configure DataSource programmatically in Spring Boot

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

>确保您具有Spring JDBC依赖项.

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>

>使用DataSourceBuilder,使用凭据构造新的DataSource对象

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驱动程序.如果使用的是不同的数据库,则必须为这些库添加依赖项,然后为动态数据源指定驱动程序类.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐