Spring Data Jpa 如何为Java Sping Boot 动态初始化数据库连接

dzhpxtsq  于 7个月前  发布在  Spring
关注(0)|答案(1)|浏览(59)

在我的后端API中,我想选择或创建一个数据库,一旦我的数据库被选择或创建,我想使用ORM来更新或创建数据库中的模式,但我如何设置jdbc.url在运行时连接到我的数据库?
我已经尝试了一些方法,但所有这些方法都在开始时连接到数据库(这就是为什么application.properties存储jdbc.url和其他一些属性)。
这给了我另一个想法,使2个不同的API,一个主API(与主数据库)将创建或选择所需的数据库(客户端数据库),第二个API将建立连接,从一开始就与该数据库(客户端数据库)作为常见的Java包需要,但他们我有另一个问题.我如何才能启动我的第二个API与指定的jdbc.url数据库?
我正在使用Azure门户服务。

wtzytmuj

wtzytmuj1#

Spring具有动态设置连接的机制(主要用于多租户方法)。我认为您可以利用它来解决您的问题。
您可以尝试在MultitenantConnectionProvider的getConnection步骤中构建dataSource以连接到新数据库。请参考本教程:https://spring.io/blog/2022/07/31/how-to-integrate-hibernates-multitenant-feature-with-spring-data-jpa-in-a-spring-boot-application
我写了一些代码作为你需要的例子:
1.保存租户信息的实体:

public class DBContext {

    private static final ThreadLocal<String> CURRENT_DB = new ThreadLocal<>();

    public static String getCurrentDB {
        return CURRENT_DB.get();
    }

    public static void setCurrentDB(String db) {
        CURRENT_DB.set(db);
    }

字符串
1.类设置租户标识符:

@Component
public class TenantIdentifierResolver implements CurrentTenantIdentifierResolver {

    @Override
    public String resolveCurrentTenantIdentifier() {
        return DBContext.getCurrentDB();
    }


1.然后使用它来构建数据源:

public class MultiTenantConnectionProviderImpl implements MultiTenantConnectionProvider {

    @Override
    public Connection getConnection(String tenantIdentifier) throws SQLException {
        // < build data source here >
        return datasource.getConnection();
    }
}


1.最后,在代码中的某个地方,设置当前DB:

DBContext.setCurrentDB(newDB);


你可以试着把事情简单化!但我很确定这能解决你的问题。

相关问题