Spring Boot:如何使用多个模式并在运行时动态选择使用哪一个

Posted

技术标签:

【中文标题】Spring Boot:如何使用多个模式并在运行时动态选择使用哪一个【英文标题】:Spring Boot: How to use multiple schemas and dynamically choose which one to use at runtime 【发布时间】:2017-06-29 23:39:22 【问题描述】:

我有以下相同的问题,但我想知道答案。 Spring Boot: How to use multiple schemas and dynamically choose which one to use for every request at runtime

请帮我寻找答案

如何拥有一个数据库连接并为每个请求指定不同的架构?

提前谢谢你。

【问题讨论】:

请解释需要 1K 个相同的表。 (该链接似乎有一种错误的印象,即它会比一个十亿行的表更好。) 我正在使用 JPA 和 JDBC 它的 2019 年,如果找到解决方案,我对旧产品有同样的问题,请分享 我能想到一个非常好的例子:将 Web 应用程序移到云中,而不是为每个客户重新部署相同的 war 文件,而是根据身份验证详细信息选择架构。这就是我正在研究的场景。 【参考方案1】:

定义多个数据源并根据您的要求更改为具有正确架构的数据源不是可行吗?

spring.datasource.url = jdbc:oracle:thin:@//maui:1521/xe
spring.datasource.username = schema1
spring.datasource.password = ...

spring.datasource2.url = jdbc:oracle:thin:@//maui:1521/xe
spring.datasource2.username = schema2
spring.datasource2.password = ..

@Bean
@Primary
@ConfigurationProperties(prefix="spring.datasource")
public DataSource schema1() 
    return DataSourceBuilder.create().build();


@Bean
@ConfigurationProperties(prefix="spring.datasource2")
public DataSource schema2() 
    return DataSourceBuilder.create().build();

否则,您需要终止并重新创建连接以继续使用单一数据源,但这对您的应用程序来说真的很慢,因为它需要一次又一次地重新连接。你最好使用一些 NoSQL 数据库来实现这种动态数据存储。

【讨论】:

不,我使用的是signle db,但是不同的架构和架构名称是通过api主体给出的,我需要从多个架构中查询并响应。 你能告诉我如何杀死并重新创建连接,这会很有帮助。感谢您的回复。 @LakshmiNaresh 我的建议适用于具有不同模式的相同数据库,可能由于缺少 url 部分而有点模糊。你试过用吗? @LakshmiNaresh kill & create connection 对于您的应用程序来说确实效率低下,尽管必须说多个连接到同一个数据库会导致目标数据库的额外负载,但至少可以满足您的要求高效。 @LakshmiNaresh 我们在谈论多少个模式?你不能为所有可能的模式准备数据源,并使用 API 调用请求的模式,使用单个数据源进行多个模式查询会非常慢(杀死和重新连接)

以上是关于Spring Boot:如何使用多个模式并在运行时动态选择使用哪一个的主要内容,如果未能解决你的问题,请参考以下文章

如何在spring boot中配置log4j写入文件?

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

如何在spring-boot中添加多个application.properties文件?

如何通过使用 JPA + Hibernate 和 Spring-boot 在一个数据库中使用多个模式?

Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口

如何创建 Spring Boot 应用程序并在 Tomcat 中将其作为 .war 运行? [复制]