一个会话的多个事务管理器Factory



我有两个数据库,它们的方案相同。

我的hibernate 3.2/Spring 3应用程序为每个数据库有一个数据源(通过jndi),为每个数据源有一个transactionno管理器(hibernate TransactionManager)。

问题:我可以使用会话工厂的一个实例吗?该实例应该使用与当前事务关联的数据源?

假设有以下方法。

@Transactional(readOnly = true, value = "tmDBOne")
public String db1() throws IOException {
    dao.execute(); // dao uses injected session factory
}

@Transactional(readOnly = true, value = "tmDBTwo")
public void db2() throws IOException {
    dao.execute(); // dao uses injected session factory
}

trnsaction经理:

<bean id="tmDBOne"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="dataSource" ref="dsDBOne/>
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="tmDBTwo"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="dataSource" ref="dsDBTwo/>
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
不,您需要两个sessionFactory。SessionFactory管理二级缓存——如果来自两个不同来源的数据在二级缓存中合并,将导致问题。

如果您不使用二级缓存,可以考虑在运行时使用spring提供的"动态数据源路由"支持来切换底层数据源。

只有当两个数据源都具有相同的模式(在您的情况下似乎是这样)时,这才会起作用。

相关内容

  • 没有找到相关文章

最新更新