Java 冬眠+;Spring使用多个数据源?
我正在开发一个使用SpringMVC2.5和Hibernate的web应用程序 应用程序的要求之一是必须能够将某些对象导出到外部数据库。我想我也可以使用现有的数据层,将对象保存到外部源 我对春天和冬眠还不熟悉,我想我只是想知道我应该如何处理这个问题。现在,一切都是通过注释自动连接起来的。我猜我必须创建一个新的数据源bean、一个新的sessionFactory和一个transactionManager……也许……但是Java 冬眠+;Spring使用多个数据源?,java,hibernate,spring,spring-mvc,Java,Hibernate,Spring,Spring Mvc,我正在开发一个使用SpringMVC2.5和Hibernate的web应用程序 应用程序的要求之一是必须能够将某些对象导出到外部数据库。我想我也可以使用现有的数据层,将对象保存到外部源 我对春天和冬眠还不熟悉,我想我只是想知道我应该如何处理这个问题。现在,一切都是通过注释自动连接起来的。我猜我必须创建一个新的数据源bean、一个新的sessionFactory和一个transactionManager……也许……但是 我只希望当用户特别“导出”时,与外部数据源的连接可用 自动布线会妨碍我吗?当我
我想我不需要特别回答上面的问题,如果有人能帮我完成这样的工作的基本过程。谢谢 在spring环境中配置多个数据源和会话工厂本身并不是问题,但它确实会降低自动布线的吸引力 您可以使用
@Qualifier
注释告诉自动连接选择哪一个,但我建议不要使用自动连接,而是使用
或
显式注入正确的数据源和会话工厂
如果两个数据源都由您的应用程序服务器管理,则事务管理器可能在两个数据源之间共享,但听起来您不需要跨两个数据源具有事务完整性,每个数据源都有单独的事务就足够了。幸运的是,Spring已经有了一个解决方案:AbstractRoutingDataSource。它基本上充当多个数据源的门面,并允许您对其进行子类化,并实现决定应使用哪个数据源所需的任何逻辑。有关详情如下:
这使得您的数据源查找逻辑只在一个地方处理。您的DAO层和SessionFactory不需要调整,只需要将AbstractRoutingDataSource的子类注入Hibernate SessionFactory。这个问题与这个问题非常相似:如何在两个数据源之间共享事务管理器?我没有看到一个setter接受SessionFactory或类似的列表。@NieldeWet:多数据源事务是完全不同的游戏。分布式事务很难实现。为此,您需要JavaEE中JTA实现的全部功能,然后使用Spring的JtaTransactionManager与您的应用程序集成。如果在运行时只有一个活动数据源,这是正确的方法吗?在我的例子中,我们为不同的客户机支持2个dbms,但每个只支持1个服务器。不可能。您可能希望通过Spring PropertyPlaceHolderConfigure配置JDBC URL。你可以从属性文件甚至环境变量中读取它,这和我最后做的差不多。我指定了一个属性,用于选择哪个bean用作数据源。我把它贴了