如何动态管理多个数据源

时间:2011-05-24 11:16:18

标签: java hibernate spring

其他主题已涵盖类似的主题,但我无法找到解决问题的明确方法。

我们要努力实现的是设计一个能够:

的网络应用程序
  1. 在启动时读取数据源配置(包含多个数据源定义的XML文件,它位于WAR文件之外,而不是应用程序上下文或hibernate配置文件)
  2. 为每一个创建会话工厂(考虑到每个数据源都是具有不同架构的数据库)
  3. 根据用户输入在运行时切换到不同的数据源(用户可以选择他们想要使用的数据源)
  4. 提供正确的dao对象来管理用户请求。
  5. 目前我们有一个DAO Manager对象,它能够读取数据源配置文件并实例化多个会话工厂,并将它们保存在地图中。每个会话工厂都使用包含正确的hibernate映射类的配置创建(每个数据库模式都不同)。此外,我们有多个DAO接口及其实现,用于访问“他们的数据库”。

    此时我们需要一种方法从DAO管理器获取一个特定的DAO对象,其中包含正确的会话工厂,所有这些都基于用户请求(基本上是来自包含数据源ID或自定义的上述服务的调用)数据源对象)。

    理想情况下,服务层应该使用DAO管理器根据数据源ID(例如)获取DAO对象,而不必担心它的实际实现:DAO管理器会通过创建正确的DAO对象来处理它。根据数据源ID注入正确的会话工厂。

    我的问题是:

    • 这是一个很好的方法吗?
    • 如何使用Spring在DAO Manager中为每个DAO接口动态注入多个DAO实现?
    • 一旦创建了会话工厂,有没有办法让Spring处理它们,就像我通常在application-context.xml中使用依赖注入一样?
    • 第二级缓存是否仍适用于每个会话工厂?

1 个答案:

答案 0 :(得分:1)

  

这是一个很好的方法吗?

这可能是唯一可行的方法。所以,是的。

  

如何动态使用Spring   在DAO Manager中注入多个DAO   每个DAO的实现   接口

动态?我以为你想在启动时这样做。如果是这样,只需提供一个包含列表或数组的访问器:

public void setMyDaos(List<Mydao> daos){
     this.daos = daos;
}
  

会议工厂一旦开始   创造,有没有办法让春天   正如我通常所做的那样处理它们   在内部依赖注入   应用程序的context.xml?

这个很难。我想你可能必须将sessionFactory bean存储在scope=session

相关问题