Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 冬眠+;Spring使用多个数据源?_Java_Hibernate_Spring_Spring Mvc - Fatal编程技术网

Java 冬眠+;Spring使用多个数据源?

Java 冬眠+;Spring使用多个数据源?,java,hibernate,spring,spring-mvc,Java,Hibernate,Spring,Spring Mvc,我正在开发一个使用SpringMVC2.5和Hibernate的web应用程序 应用程序的要求之一是必须能够将某些对象导出到外部数据库。我想我也可以使用现有的数据层,将对象保存到外部源 我对春天和冬眠还不熟悉,我想我只是想知道我应该如何处理这个问题。现在,一切都是通过注释自动连接起来的。我猜我必须创建一个新的数据源bean、一个新的sessionFactory和一个transactionManager……也许……但是 我只希望当用户特别“导出”时,与外部数据源的连接可用 自动布线会妨碍我吗?当我

我正在开发一个使用SpringMVC2.5和Hibernate的web应用程序

应用程序的要求之一是必须能够将某些对象导出到外部数据库。我想我也可以使用现有的数据层,将对象保存到外部源

我对春天和冬眠还不熟悉,我想我只是想知道我应该如何处理这个问题。现在,一切都是通过注释自动连接起来的。我猜我必须创建一个新的数据源bean、一个新的sessionFactory和一个transactionManager……也许……但是

  • 我只希望当用户特别“导出”时,与外部数据源的连接可用

  • 自动布线会妨碍我吗?当我为导出过程实例化DAO时,如何告诉Spring注入适当的sessionFactory?(我正在通过构造函数自动连接)我是否应该通过编程创建会话工厂(etc),然后手动实例化我的DAO?如果是,这是否会“覆盖”autowire注释


  • 我想我不需要特别回答上面的问题,如果有人能帮我完成这样的工作的基本过程。谢谢

    在spring环境中配置多个数据源和会话工厂本身并不是问题,但它确实会降低自动布线的吸引力

    您可以使用
    @Qualifier
    注释告诉自动连接选择哪一个,但我建议不要使用自动连接,而是使用
    显式注入正确的数据源和会话工厂


    如果两个数据源都由您的应用程序服务器管理,则事务管理器可能在两个数据源之间共享,但听起来您不需要跨两个数据源具有事务完整性,每个数据源都有单独的事务就足够了。

    幸运的是,Spring已经有了一个解决方案:AbstractRoutingDataSource。它基本上充当多个数据源的门面,并允许您对其进行子类化,并实现决定应使用哪个数据源所需的任何逻辑。有关详情如下:


    这使得您的数据源查找逻辑只在一个地方处理。您的DAO层和SessionFactory不需要调整,只需要将AbstractRoutingDataSource的子类注入Hibernate SessionFactory。

    这个问题与这个问题非常相似:如何在两个数据源之间共享事务管理器?我没有看到一个setter接受SessionFactory或类似的列表。@NieldeWet:多数据源事务是完全不同的游戏。分布式事务很难实现。为此,您需要JavaEE中JTA实现的全部功能,然后使用Spring的JtaTransactionManager与您的应用程序集成。如果在运行时只有一个活动数据源,这是正确的方法吗?在我的例子中,我们为不同的客户机支持2个dbms,但每个只支持1个服务器。不可能。您可能希望通过Spring PropertyPlaceHolderConfigure配置JDBC URL。你可以从属性文件甚至环境变量中读取它,这和我最后做的差不多。我指定了一个属性,用于选择哪个bean用作数据源。我把它贴了