Spring - 带有ScheduledExecutorService的@Transactional - 后台会发生什么?

时间:2015-11-13 03:09:41

标签: spring spring-transactions transactional scheduledexecutorservice

我想知道使用ScheduledExecutorService使用@Transactional注释方法时实际发生了什么?

假设在外部调用methodA。假设在调用methodA时,someDao.methodDao()加入事务并且scheduleMethodB()立即返回,我是否正确。

2秒后,调度程序调用methodB()。在这种情况下,这会有什么作用?它会保持TransactionProxy并在单独的事务中执行methodB吗?如果没有,那么我们如何才能实现这一目标。

我知道@Transactional基于代理,因此methodB在调度程序下调用自调用。

  

注意:由于此机制基于代理,因此只有'外部'方法   通过代理进入的电话将被截获。这意味着   '自我调用',即目标对象中调用一些的方法   目标对象的其他方法,不会导致实际的交易   在运行时,即使调用的方法标有@Transactional!

ds.WriteXml(@"C:\Computers\config.xml");
if (File.Exists(@"C:\Computers\config.xml"))
{
    ds.ReadXml(@"C:\Computers\config.xml");
    //comboBox.Items.Add(ds.Tables[0].Rows[0][0].ToString()); doesn't work
    comboBox.Items.Add(ds.Tables[0].Rows.Count);  //this counts 3 rows
}

1 个答案:

答案 0 :(得分:1)

由于该类未使用@Transactional注释,因此判断调用方法是否参与父调用方法的事务取决于是否使用@Transactional注释调用的方法以及使用I配置它的传播级别认为。例如,

@Transactional(propagation=Propagation.REQUIRED)