gpt4 book ai didi

java - Spring Boot多个外部数据源存储在内部数据库中

转载 作者:太空宇宙 更新时间:2023-11-04 09:56:02 24 4
gpt4 key购买 nike

我有一个 Spring Boot 项目,并且有一个内部数据库,其配置位于 application.properties 上。在这个数据库中,我有一个 Company 表,其中包含与外部数据库的连接信息(所有外部数据库都具有相同的结构)。

我创建了一个类,它在需要时创建数据源:

public class PgDataSource {

private static Map<Long, DataSource> dataSourceMap = new HashMap<>();

private static void createDataSource(Company company) {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setMaximumPoolSize(10);
hikariConfig.setMinimumIdle(1);
hikariConfig.setJdbcUrl("jdbc:postgresql://"+company.getUrl()+"/"+company.getIdClient());
hikariConfig.setUsername(company.getUsername());
hikariConfig.setPassword(company.getPassword());

dataSourceMap.put(company.getId(), new HikariDataSource(hikariConfig));
}

public static DataSource getDataSource(Company company) {
if (!dataSourceMap.containsKey(company.getId()))
createDataSource(company);

return dataSourceMap.get(company.getId());
}

}

您能告诉我这个解决方案是否是最好的以及我是否可以将 JPA 与该解决方案结合使用?

谢谢

最佳答案

设置的困难不在于多个数据源,而在于它们是动态的,即在运行时确定。除了 DataSource 之外,JPA 还使用 EntityManagerFactoryTransactionManager,它们是静态确定的,即在编译时确定的。因此,将 JPA 与动态数据源一起使用并不容易。

在 Spring Boot 2 中,您可以尝试 AbstractRoutingDataSource ,它允许基于某些(线程绑定(bind))上下文将 JPA 调用路由到不同的数据源。 Here's如何使用它的示例和 demo应用程序。

或者,您可以将设置转变为静态设置,然后使用常规 multiple datasource方法。缺点是“公司”列表将在编译时固定,因此可能不是您想要的。

关于java - Spring Boot多个外部数据源存储在内部数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54142534/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com