Spring@Transactional timeout未超时
我已将应用程序中的事务超时设置为@Transactional(传播=传播。必需,超时=30)Spring@Transactional timeout未超时,spring,spring-transactions,Spring,Spring Transactions,我已将应用程序中的事务超时设置为@Transactional(传播=传播。必需,超时=30) ActiveMQXAConnectionFactory和Oracle XA数据源是我的分布式事务的两个资源。从队列中读取消息后,我的事务开始,处理应用程序的时间超过30秒,但事务仍未超时。只有在提交事务时,才会引发超时异常。我希望在30秒后事务立即超时并抛出异常,并使该线程可以使用队列中的另一条消息。这可能吗?如果没有看到您的配置,很难说。如果您只是添加一个@事务性的,它不会做任何事情。您需要一个Ent
ActiveMQXAConnectionFactory和Oracle XA数据源是我的分布式事务的两个资源。从队列中读取消息后,我的事务开始,处理应用程序的时间超过30秒,但事务仍未超时。只有在提交事务时,才会引发超时异常。我希望在30秒后事务立即超时并抛出异常,并使该线程可以使用队列中的另一条消息。这可能吗?如果没有看到您的配置,很难说。如果您只是添加一个
@事务性的
,它不会做任何事情。您需要一个EntityManager
和一个TransactionManager
,然后需要启用基于注释的事务管理,如果我没有记错的话,Spring需要控制您的数据源
另一个可能是不必要的补充说明,@Transactional只对公共方法有效。Spring将代理您的方法以管理事务,Spring只能代理公共方法。而且,它只能处理从另一个类到该方法的调用,如果您从同一个类中的另一个方法调用该方法,Spring也不能代理,因此没有事务管理。春天在这里是鬼鬼祟祟的
@Service
public class A{
@Autowired
Datasource datasource;
@Transactional
public void save(){
datasource.doStuff();
}
public void callSave(){
save();
}
}
@Service
public class B{
@Autowired
A a;
public void callSave(){
a.save();
}
}
这里,如果从a.callSave()
调用a.save()
,则不会发生代理,因此您将没有事务管理。但是在完全相同的应用程序中,如果您调用b.callSave()
,您将拥有事务管理,因为Spring可以将方法调用代理到a.save()
你用的是弹簧靴还是香草弹簧?如果你泄露出去,我们可能会给你更多的指导
希望这有点帮助 如果看不到您的配置,就很难说了。如果您只是添加一个
@事务性的
,它不会做任何事情。您需要一个EntityManager
和一个TransactionManager
,然后需要启用基于注释的事务管理,如果我没有记错的话,Spring需要控制您的数据源
另一个可能是不必要的补充说明,@Transactional只对公共方法有效。Spring将代理您的方法以管理事务,Spring只能代理公共方法。而且,它只能处理从另一个类到该方法的调用,如果您从同一个类中的另一个方法调用该方法,Spring也不能代理,因此没有事务管理。春天在这里是鬼鬼祟祟的
@Service
public class A{
@Autowired
Datasource datasource;
@Transactional
public void save(){
datasource.doStuff();
}
public void callSave(){
save();
}
}
@Service
public class B{
@Autowired
A a;
public void callSave(){
a.save();
}
}
这里,如果从a.callSave()
调用a.save()
,则不会发生代理,因此您将没有事务管理。但是在完全相同的应用程序中,如果您调用b.callSave()
,您将拥有事务管理,因为Spring可以将方法调用代理到a.save()
你用的是弹簧靴还是香草弹簧?如果你泄露出去,我们可能会给你更多的指导
希望这有点帮助