Java Spring引导应用程序因事务需要而无法启动\u新建

Java Spring引导应用程序因事务需要而无法启动\u新建,java,spring,spring-boot,spring-data-jpa,spring-data,Java,Spring,Spring Boot,Spring Data Jpa,Spring Data,我在spring boot应用程序中有一个调度程序,如果我在调度程序方法上使用@Transactional(propagation=propagation.REQUIRES\u NEW,rollboor=Exception.class),那么它只适用于一个数据库会话,但如果我使用@Transactional(propagation=propagation.REQUIRES\u NEW,rollboor=Exception.class)在DAO级别或服务类级别,基于数据的四个DAO/服务将转到其中

我在spring boot应用程序中有一个调度程序,如果我在调度程序方法上使用@Transactional(propagation=propagation.REQUIRES\u NEW,rollboor=Exception.class),那么它只适用于一个数据库会话,但如果我使用@Transactional(propagation=propagation.REQUIRES\u NEW,rollboor=Exception.class)在DAO级别或服务类级别,基于数据的四个DAO/服务将转到其中一个DAO,它达到了maxConnection限制16,正如我们在数据库会话中看到的那样,它的阻塞/挂起在java中没有进一步的处理。问题是什么?

这实际上取决于调用方法的方式

我要求你们做的一个测试是:

计划中添加以下方法:

@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)
然后,在服务方法中:

@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)

这样,当服务方法结束时,它会提交事务,但有另一个事务作用域在更高级别上运行。

基本上,调度程序方法中的所有处理都应该在一个事务中管理,因此注释应该在它上面(第一种方法)

如果您在service/DAO方法中添加此注释,那么对于在您内部调用的每个方法,都会创建一个新事务,这可以解释您所面临的问题


最后,无需添加“rollbackFor=Exception.class”,因为这是默认行为。

“会有什么问题?”-“它达到了maxConnection限制16”是的,它达到了maxConnection限制,应用程序没有做任何操作就卡住了。谢谢您,先生,根据您的建议,它只有两个会话,不再增加。这对我有用。谢谢你的回复,是的,请取消回滚