Hibernate,PostgreSQL:写入不同服务器上的2个不同数据库。

时间:2017-10-26 08:36:08

标签: java spring postgresql hibernate

我正在开发一个Spring-MVC应用程序,我们在2台服务器上运行,一台是我们的测试服务器,第二台是我们的实时服务器。有什么方法可以配置Hibernate在两台服务器上编写任何和所有数据库相关的查询。示例:用户A在实时服务器上保存对象A,然后在Test-server上写入相同的对象,反之亦然。我们的测试和实时服务器都有相同的设置和相同的数据库。谢谢。

root-context.xml:

   <beans:bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
                destroy-method="close">
        <beans:property name="driverClassName" value="org.postgresql.Driver"/>
        <beans:property name="url"
                        value="jdbc:postgresql://localhost:PORT/DB_NAME"/>
        <beans:property name="username" value="USERNAME"/>
        <beans:property name="password" value="PASSWORD"/>
        <beans:property name="removeAbandoned" value="true"/>
        <beans:property name="removeAbandonedTimeout" value="20"/>
        <beans:property name="defaultAutoCommit" value="false"/>
    </beans:bean>

    <!-- Hibernate 4 SessionFactory Bean definition -->
    <beans:bean id="hibernate4AnnotatedSessionFactory"
                class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource"/>
        <beans:property name="packagesToScan" value="com.tooltank.spring.model"/>
        <beans:property name="hibernateProperties">
            <beans:props>
                <beans:prop key="hibernate.dialect">org.hibernate.dialect.PostgreSQL9Dialect</beans:prop>
                <beans:prop key="hibernate.show_sql">false</beans:prop>
                <!--   <beans:prop key="hibernate.jdbc.batch_size">1000</beans:prop>-->
                <beans:prop key="hibernate.hbm2ddl.auto">update</beans:prop>
                <beans:prop key="cache.use_second_level_cache">true</beans:prop>
                <beans:prop key="cache.use_query_cache">true</beans:prop>
                <beans:prop key="hibernate.order_updates">true</beans:prop>
                <beans:prop key="show_sql">false</beans:prop>
            </beans:props>
        </beans:property>

    </beans:bean>

   <hibernate.version>4.3.9.Final</hibernate.version>

如果需要更多数据,请告知我们。谢谢。

1 个答案:

答案 0 :(得分:1)

不以你可能希望的任何方式。它们具有完全不同的事务上下文,因此您不能假装2个数据库是一个。

如果一个数据库抛出异常而另一个数据库没有异常怎么办? tx是否提交或回滚? Hibernate当然不希望它成功一半&#34;。

您可以将测试服务器作为实时服务器的从属服务器,然后只写入实时服务器。这也不是一个简单的解决方案,而且可能是完全愚蠢的。