基于REST参数的Spring Boot动态数据库URL

时间:2018-08-13 12:57:03

标签: java database spring spring-boot dynamic

我正在使用Spring boot开发应用程序,我们为每个客户提供一个数据库,主要问题是避免为每个客户创建一个连接到单个数据库的实例。考虑到这一点,我陷入了以下情况:

我需要我的应用程序与多个不同的数据库建立连接,别名我不知道应用程序何时启动。这些别名将通过REST请求提供,因此是动态的。

数据库上的所有其他凭据,驱动程序,URL,用户名和密码都是相同的,我真的只需要更改别名即可为该请求提供正确的URL。

我已根据请求创建了数据源,如下所示:

private static void selectAll(String alias){

    String sql = "select * from user";

    DataSourceBuilder dataSourceBuilder = DataSourceBuilder.create();
    dataSourceBuilder.url("jdbc:postgresql://localhost:5432/"+alias);
    dataSourceBuilder.username("username");
    dataSourceBuilder.password("password");
    DataSource dataSource = dataSourceBuilder.build();

    try {
        Connection con = dataSource.getConnection();
        con.setAutoCommit(true);
        con.prepareStatement(sql).executeQuery();
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

但是通过这种方式,我不能使用条件和休眠方式,而且我必须手动映射从数据库检索的对象,并为每个对象/表编写自己的简单SQL。

主要问题是,我可以将实体和存储库(Spring数据)用于动态数据库吗?或者,如果要这样做,我将不得不在它们之间进行选择,并为每个客户提供一个实例,并连接到一个单个数据库。

我在论坛上进行了搜索,其解决方案基于基于静态连接的解决方案,该解决方案是在Application.properties中配置的,或者它们假定URL是已知的。

感谢您的帮助,也欢迎您提出其他任何更好的方法,一点都不困难。

0 个答案:

没有答案