您应该为每个 DBS 配置单独的会话工厂和数据源配置,您可以参考正确的配置,例如通过数据源名称。
这意味着如果您有 3 个远程数据库,那么理想情况下您应该有 3 个 sessionFacories 和数据源。
例子:
hibernate-first.cfg.xml - 和你一样
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>
<!-- Here commes the entities mapped to tables in the FIRST database -->
<mapping class="com.yourpackage.EntityOftheFirstDatabase" />
</session-factory>
休眠-second.cfg.xml
<hibernate-configuration>
<session-factory>
<property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="show_sql">true</property>
<property name="hibernate.hbm2ddl.auto">update</property>
<property name="hibernate.connection.SetBigStringTryClob">true</property>
<property name="hibernate.jdbc.batch_size">0</property>
<!-- Here commes the entities mapped to tables in the SECOND database -->
<mapping class="com.yourpackage.EntityOftheSecondDatabase" />
</session-factory>
现在让我们在 spring 中配置会话工厂:
<!-- Hibernate SessionFactory for the FIRST database -->
<bean id="sessionFactoryForTheFirstDatabase" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourceForTheFirstDatabase" />
<property name="configLocation" value="classpath:hibernate-first.cfg.xml" />
</bean>
<!-- Hibernate SessionFactory for the SECOND database -->
<bean id="sessionFactoryForTheSecondDatabase" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSourceForTheSecondDatabase" />
<property name="configLocation" value="classpath:hibernate-second.cfg.xml" />
</bean>
数据源
<bean id="dataSourceForTheFirstDatabase" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="your specific" />
<property name="url" value="${database.url}" />
<property name="username" value="${database.username}" />
<property name="password" value="${database.password}" />
</bean>
第二个数据源完全相同,只需将其指向第二个数据库。如果您想配置 Tx 管理,那么您的数据库需要两个事务管理器:
<bean id="firstDbServiceProxyCreator" class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<description>Transaction boundaries are mapped to service layer</description>
<property name="proxyTargetClass" value="false" />
<property name="beanNames">
<list>
<value>ServicesMangingoperationsAboveYourFirstDatabase1</value>
<value>ServicesMangingoperationsAboveYourFirstDatabase2</value>
</list>
</property>
<property name="interceptorNames">
<list>
<value>FirstDbTxInterceptor</value>
</list>
</property>
</bean>
如果您想跨多个数据库进行单个事务也是可能的,只是不知道您是否需要它!希望这对你来说已经足够清楚了。我知道有更多奇特的方法来定义 TX 管理器和弹簧的东西,主要是如果你使用的是最新的,我建议你按照我的描述试一试,然后你可以调整它 - 谷歌是你的朋友:)