2012-01-04 125 views
2

我有一个任务为不同的数据源创建多个会话工厂。一个数据源将用于读取请求,另一个数据源用于读取请求。会话工厂处理多个数据库连接

我们的数据库服务(DAO包装)的每个API都是作为一个事务执行的。单个API可能会调用具有不同读/写属性的多个DAO函数。

执行此任务的最佳方式是什么?

+0

我认为这个话题会给你一些帮助。 http://stackoverflow.com/questions/2017949/when-to-use-global-transaction-or-use-spring-aop-for-transaction – donnior 2012-01-04 07:07:35

回答

1

我假设不同的数据源是不同的数据库。否则,您可以使用readOnly属性和@Transactional注释来管理只读事务。

您可以在DAO层注入两个单独的会话工厂来管理这些事务。或者,您可以使用AbstractRoutingDataSource。看到写在这个here

+0

是的,不同的数据源是不同的数据库。 – instanceOfObject 2012-01-04 07:44:36

+0

然后你可以注入不同的sessionfactories。如果你有不同的事务管理器,那么你可以使用@Transactional(“TxManagerName”)。你可以将这一切与AbstractRoutingDataSource联系起来。但是,您是否计划在同一方法内跨越不同的事务数据源 - 即,如果一个数据库回滚会影响另一个数据源,请考虑使用XA数据源。 – 2012-01-04 07:51:06

+0

这真的很有帮助。 您能否告诉我从单个API连接到多个数据库的优缺点? 除此之外,可能很幼稚,但在Spring中使用全局事务(XA数据源)的方式是什么? – instanceOfObject 2012-01-04 10:34:56