[英]Spring boot application stuck with Transaction requried_new
我在 spring 启动应用程序中有一个调度程序,如果我在调度程序方法上使用 @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class) 那么它只适用于一个数据库 session 但如果我使用 @Transactional.Transaction. REQUIRES_NEW, rollbackFor = Exception.class) 在 DAO 级别或服务 class 级别,基于数据的四个 DAO/服务将 go 到其中一个 DAO,它达到 maxConnection 限制 16,正如我们在数据库会话中看到的那样,它没有卡住/挂起在 java 中处理。 会有什么问题。?
这实际上取决于您调用方法的方式。
我会要求你做的一项测试是:
在schedule方法中添加:
@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
然后,在Service方法中,这个:
@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
这样,当服务方法结束时,它会提交事务,但是还有另一个事务 scope 在更高级别运行。
基本上,调度程序方法中的所有处理都应该在一个事务中进行管理,因此注释应该在它上面(第一种方法)。
如果您在服务/DAO 方法中添加此注释,那么对于在您内部调用的每个方法,都会创建一个新事务,这可以解释您所面临的问题。
最后不需要添加“rollbackFor = Exception.class”,因为这是默认行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.