我正在研究一个广泛使用春季交易的项目。我碰巧发现我正在抛出一个异常,而没有正确处理它没有提交或回滚事务的离子。所以即使线程停止,连接仍然保持活动状态。当向web服务器(Apache tomcat 7.0)发出新的请求时,Spring提供了与新线程的较早连接。由于线程没有启动连接,因此线程无法关闭它,也就是说,.commit不起作用。因为即使在没有异常的情况下,对象在后续事务中也不会持久保存在数据库中。我该如何解决这个问题,以便我可以检测到实际问题发生在哪里,或者可以设计一个退出点,我可以在响应发送到浏览器之前明确地关闭事务。Spring是否真的为每个线程提供新的事务?
1
A
回答
0
默认情况下,从@Transactional
方法抛出的运行时未检查异常或错误将回滚该事务;默认情况下,返回或检查异常将提交事务。您可以告诉Spring使用@Transactional
注释的注释类型元素来覆盖该行为。
Spring框架参考手册有一个entire chapter devoted to transaction management。你需要阅读并理解这一点作为你的出发点。
+1
A * runtime *异常回滚事务。检查的异常不会。 –
+0
澄清了答案。 –
相关问题
- 1. BackgroundWorker是否提供真正的多线程?
- 2. 是否有一个ExecutorService为每个任务创建一个新的线程?
- 3. Spring Data Neo4j InvalidDataAccessApiUsageException:此线程的事务不是最新的
- 4. python中的线程模块是否提供了真正的并行性?
- 5. 同一个事务中的多个资源提供者Spring
- 6. 应用服务器是否提供了Spring可以提供的功能
- 7. jmx是否为每个调用创建一个新线程?
- 8. Spring事务管理器是否将连接绑定到线程?
- 9. 开始新的事务是否强制当前事务提交?
- 10. Cloo中是否提供仿真模式?
- 11. DotNetOpenAuth OpenId提供程序是否真的有效?
- 12. PyZMQ是否为每个新客户端连接创建线程?
- 13. Spring的事务处理线程
- 14. performSelectorInBackground是否为每次调用产生新的线程?
- 15. 我真的需要为URLLoader提供一个事件处理程序吗?
- 16. 使用StoredProcedure类型的SqlCommand是否提供外部事务?
- 17. Sendgrid是否为每个电子邮件提供响应?
- 18. Spring的PlatformTransactionManager是否需要按特定顺序提交事务?
- 19. 描述每个ZF2路线 - 是否真的需要?
- 20. 多线程服务器/每个线程上的新对象
- 21. Spring + Hibernate - 当事务真的被提交时?
- 22. 为DDD中的每个服务类提供一个接口是否是一种很好的设计实践?
- 23. 是否为[email protected]提供了一个新的应用程序权限?
- 24. Java - 在单独的线程中为每个客户端提供服务的服务器?
- 25. 为记事本++中的每个单词提供单引号?
- 26. 哪个Spring Framework提供REST服务?
- 27. 每个RMI请求是否在服务器端创建一个新线程?
- 28. 我是否需要为每个线程创建新的Callable对象?
- 29. Spring提供CGLIB错误的事务注释
- 30. iPhone是否提供了一个很好的加密API /服务提供者?
您的诊断可能是错误的。无论您如何处理异常,Spring都会为您提交或回滚事务:如果从事务性方法抛出运行时异常,则事务将回滚。否则,它承诺。但是,您有责任始终关闭JDBC连接。如果你使用Spring的JdbcTemplate,Spring也会为你做。 –
也许你从来没有使用Spring的Programatic Transaction Approah。如果你看看Spring代码的相同,我们可以看到事务是基于线程的,其中TransactionStatus对象被绑定到每个带有isOwner作为布尔标志的函数,从而赋予函数最终提交决策的权力。 –
如果我们不在owner函数中编写任何.Commit或.rollback,那么TransactionStatus的对象引用会丢失,当从线程池返回相同的线程时,新的事务永远不会启动,并且它会在先前的事务中被包装,最终u永远不会进行转换,并且在一段时间不活动后我们会关闭连接。 –