[英]`@Transactional` not working for Spring 2 controller
我的应用程序中有一个旧的 controller ,它在 xml 中定义为 spring bean,并使用 Spring 的SimpleFormController 。 我试图通过添加@Transactional
注释使 controller 的onSubmit
方法中的过程具有事务性,但它不起作用。 根据本指南,注释的调用必须发生在“bean 之外”,这是否意味着注释不能在像我这样的旧 Spring 控制器中使用? 是否有任何替代方案或解决方法?
我知道它不起作用的原因是因为1)对数据库的更改不会因错误而回滚(尽管我已经定义了rollbackFor = Exception.class
,甚至在某些情况下使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
,在这种情况下,它尝试使用后者,它会抛出一个错误,指出不存在事务。2)我在 Spring 中实例化@Transactional
的位置添加了断点,并且没有一个被命中。
编辑:所以人们要求可重现的代码示例。 问题不在于业务逻辑代码中,我正在寻找 Spring 2 controller 中注释的用法的清晰度。 所以我的例子是这样的:
public class ImportController extends SimpleFormController {
@Override
@Transactional(rollbackFor = Exception.class)
public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
...
}
}
你说的对。 @Transactional
在这里不起作用,因为onSubmit
是由同一个 bean 调用的。
在这种情况下,调用是直接完成的,默认的 spring 事务处理不起作用。
有关您拥有的选项的详细说明,请参阅此问题中的答案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.