情况是这样的:在查询中使用的表(命名为汇总)以前位于我执行应用程序的所有查询(命名为server1和DB1)的服务器和数据库中。但是最近从这个数据库中删除了汇总表,因此有必要参考其他服务器/数据库组合。
为此目的,将服务器名称和用于访问汇总表的数据库中的数据参数化。这些数据依赖于以这种方式连接的数据库:例如,如果我在数据库DB1 of server1中,那么参数将是server21和DB21,而如果有人从server1参数中引用来自DB5的参数,则是server16和DB16。
在这方面,我没有问题,因为我列出了这两个参数的SQL查询,准备给出服务器和数据库的名称,以便在每种情况下参考。为了给服务器名和数据库名称提供动态生成要连接到的数据源,这个查询是必需的。
问题和这个条目的主题是,是否有任何人必须动态配置要在hibernate.properties中使用的数据源,因为这通常是一个固定值,在这种情况下应该允许更改,以便只在这个特定的中查看汇总表(使用我的SQL查询检索的参数),而所有其他数据库操作都必须使用原始连接属性来执行。
也就是说:我需要的是根据来自查询的参数动态地生成数据源,所以通过预先知道多少和可能的连接来处理这个问题的方法应该被丢弃,因为它们不适合解决我的问题。
应用程序规范如下:
感谢所有有这种知识并愿意分享的人。
发布于 2011-03-29 21:41:09
您可以在hibernate中使用ConnectionProvider来决定如何获得会话使用的连接。我们在应用程序中使用这样的东西:
public Connection getConnection() throws SQLException {
DataSource ds = (DataSource) BeanFactory.getBean("dataSource" + UserInfo.getDSName());
return ds.getConnection();
}UserInfo是一个在ThreadLocal中存储东西的类。此代码将根据ThreadLocal中传递的名称从Spring中选择数据源。我们要做的是在打开会话之前设置要使用的数据源的名称(实际的逻辑要比这个复杂一些,因为它取决于用户的首选项和其他东西)。
您可以这样做来选择要连接到的数据库。
您可以检查javadocs的ConnectionProvider接口。创建您自己的实现,将hibernate配置文件中的hibernate.connection.provider_class属性设置为指向您的类,您就完成了。
发布于 2011-03-29 13:57:33
我想,这取决于数据库/服务器组合的数量和使用频率,但如果数据库/服务器数量多,使用频率低,则可以选择使用没有Hibernate和数据源的普通JDBC。我不认为Hibernate是针对这种情况的。
https://stackoverflow.com/questions/5473288
复制相似问题