【发布时间】:2011-08-31 20:38:53
【问题描述】:
其他主题已涵盖类似主题,但我找不到解决问题的明确解决方案。
我们想要实现的是设计一个能够:
- 在启动时读取数据源配置(包含多个数据源定义的 XML 文件,位于 WAR 文件之外,它不是应用程序上下文或休眠配置文件)
- 为它们中的每一个创建一个会话工厂(考虑到每个数据源都是具有不同架构的数据库)
- 在运行时根据用户输入切换到不同的数据源(用户可以选择他们想要使用的数据源)
- 提供正确的 dao 对象来管理用户请求。
目前我们有一个 DAO Manager 对象,它能够读取数据源配置文件并实例化多个会话工厂,并将它们保存在一个映射中。每个会话工厂都是使用包含正确休眠映射类(每个数据库模式不同)的配置创建的。此外,我们有多个 DAO 接口及其实现,用于访问“他们的数据库”。
此时,我们需要一种方法从 DAO 管理器获取特定的 DAO 对象,其中包含附加的正确会话工厂,这一切都基于用户请求(基本上是来自上述服务的调用,其中包含数据源 ID 或自定义数据源对象)。
理想情况下,服务层应该使用 DAO 管理器根据数据源 ID(例如)获取 DAO 对象,而不用担心它的实际实现:DAO 管理器会通过创建正确的 DAO 对象和根据数据源 ID 在其中注入正确的会话工厂。
我的问题是:
- 这是一个很好的方法吗?
- 如何使用 Spring 在 DAO 管理器中为每个 DAO 接口动态注入多个 DAO 实现?
- 创建会话工厂后,有没有办法让 Spring 处理它们,就像我通常在 application-context.xml 中使用依赖注入所做的那样?
- 二级缓存是否仍适用于每个会话工厂?
【问题讨论】: