我正在开发一个使用Spring MVC 2.5和Hibernate的Web应用程序。
该应用程序的一个要求是它必须能够将一些对象导出到外部数据库。我想我也可以使用我现有的数据层,只需将对象保存到外部源。
我是Spring和Hibernate的新手,我想我只是想知道如何处理这个问题。现在,所有内容都会通过注释自动连接起来。我猜我必须创建一个新的dataSource bean,一个新的sessionFactory和一个transactionManager ......也许......但是......
当用户专门“导出”时,我只希望连接到外部数据源。
自动装配会妨碍我吗?当我为导出过程实例化DAO时,如何告诉Spring注入适当的sessionFactory? (我通过构造函数自动装配)我应该以编程方式创建会话工厂(等),然后手动实例化我的DAO吗?如果是这样,这将“覆盖”autowire注释吗?
我想我不需要回答上述问题,特别是如果有人能够指导我完成这样的工作的基本过程。谢谢!
答案 0 :(得分:25)
http://blog.springsource.com/2007/01/23/dynamic-datasource-routing/
这使您的DataSource查找逻辑可以在一个地方处理。您的DAO层和SessionFactory不需要调整,除非您需要将AbstractRoutingDataSource的子类注入Hibernate SessionFactory。
答案 1 :(得分:8)
在spring上下文中配置多个数据源和会话工厂本身不是问题,但它确实使自动装配不那么有吸引力。
您可以使用@Qualifier
注释告诉自动装配选择哪一个,但我建议不使用自动装配,而是使用<property>
或{明确注入正确的数据源和会话工厂{1}}。
如果两个数据源都是由您的应用服务器管理的,那么事务管理器可能会在两个数据源之间共享,但听起来两个数据源之间的事务完整性并不是您的要求,并且具有单独的事务处理每个数据源都足够了。