具有多个会话工厂的多事务管理器

时间:2016-11-18 07:37:42

标签: spring transactions

我的基本要求是让多个sessionFactory对象指向两个不同的模式(这是逻辑分组,每个逻辑组中都有多个模式),所以这里是配置:          

eventHandler.createEvent("Change X Value", 800, () -> x.set(5)); 

现在我创建了具有保存方法的Dao类

<tx:annotation-driven transaction-manager="transactionManager1" />
<transactionManager1>
  <sessionFactory1>
</transactionManager1>

<tx:annotation-driven transaction-manager="transactionManager2" />
<transactionManager2>
  <sessionFactory2>
</transactionManager2>

这段代码工作正常,但我的问题是,@ Transactional注释会选择哪个事务管理器?

还是有办法在日志中打印?

2 个答案:

答案 0 :(得分:0)

yuo可以通过在注释中传递其名称来为您指定transacion管理器 例如:

@Transactional(value="transactionManager2")
public void save(Object){
   sessionFactory2.getCurrentSession().save(object);
}

您可以在http://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/transaction/annotation/Transactional.html

找到更多详细信息

我希望它有用

安吉洛

答案 1 :(得分:0)

如果您发布的(伪)配置也是您在配置中定义它的顺序,则始终使用 def User.digest(string) cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST : BCrypt::Engine.cost BCrypt::Password.create(string, cost: cost) end def self.from_omniauth(auth) where(provider: auth.provider, uid: auth.uid).first_or_create do |user| user.provider = auth.provider user.uid = auth.uid user.name = auth.info.name user.email = auth.info.email user.oauth_token = auth.credentials.token user.oauth_expires_at = Time.at(auth.credentials.expires_at) user.save! end end end

定义多个transactionManager2元素没有用处。使用此元素,您可以指示要使用注释驱动的事务,并希望使用给定的<tx:annotation-driven />作为默认事务管理器。

在您的情况下,您已定义2,最后一个将是有效的。

当使用多个事务管理器时,您必须在transaction-manager注释中指定哪个事务管理器用于该特定事务方法。

因此,您需要指定@Transactional@Transactional("transactionManager1"),具体取决于您认为哪一个是默认值。