具有在运行时创建的多个数据源的 Spring Boot 和 Spring Data 应用程序

Posted

技术标签:

【中文标题】具有在运行时创建的多个数据源的 Spring Boot 和 Spring Data 应用程序【英文标题】:Spring Boot and Spring Data application with multiple DataSources created in runtime 【发布时间】:2015-05-19 05:27:18 【问题描述】:

我正在开发一个使用 Spring Data JPA 的 Spring Boot 应用程序,并且需要连接到许多不同的数据库,例如PostreSQL、mysql、MS-SQL、MongoDB。 我需要在运行时创建所有数据源,即用户在启动的应用程序中通过 GUI 选择这些数据: -驱动程序(列表之一), -资源, -港口, -用户名, -密码。 毕竟,他将本机 sql 写入选择的数据库并获得结果。 我在堆栈和弹簧论坛(例如 AbstractRoutingDataSource)中阅读了很多关于它的内容,但所有这些教程都展示了如何从 xml 配置或 java bean 中的静态定义创建数据源。可以在运行时创建许多数据源吗?如何管理事务以及如何创建多个 sessionFactories?可以使用@Transactional 注释吗?最好的方法是什么?有人可以解释我如何“一步一步”做到这一点吗?

【问题讨论】:

如果适合您的需要,请考虑关闭您的问题或将答案标记为已接受的答案。 【参考方案1】:

希望答案还为时不晚 ;)

我开发了一个可以轻松集成到任何 Spring 项目中的模块。它使用元数据源来保存租户数据源连接详细信息。 对于租户数据源,使用 AbstractRoutingDataSource。

在这里,您可以找到我使用 AbstractRoutingDataSource 的核心实现。 https://github.com/Dactabird/multitenancy

这是一个展示如何集成它的示例。 https://github.com/Dactabird/multitenancy-sample 在此示例中,我使用的是 H2 嵌入式数据库。当然,你可以使用任何你想要的东西。

请随时根据您的目的对其进行修改或询问是否有问题!

【讨论】:

以上是关于具有在运行时创建的多个数据源的 Spring Boot 和 Spring Data 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

使用Spring Boot JPA配置多个数据源

Spring初始化多个数据库

如何使用spring webflux在功能性反应java中编写具有多个if else的复杂代码

带有 Spring Boot 的 Spring Data JPA 中的多个数据源,[重复]

我可以在同一台机器上运行多个elasticsearch实例进行日志聚合吗?

多租户:使用 Spring Data JPA 管理多个数据源