我正在使用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是已知的。
感谢您的帮助,也欢迎您提出其他任何更好的方法,一点都不困难。