我的应用程序中有一个旧控制器,它在 xml 中定义为 spring bean,并使用 Spring 的SimpleFormController。我试图onSubmit通过添加注释使控制器方法中的进程成为事务性的,@Transactional但它不起作用。根据本指南,注解的调用必须发生在“bean 之外”,这是否意味着注解不能在像我这样的旧 Spring 控制器中使用?是否有任何替代方案或解决方法?
我知道它不起作用的原因是因为 1) 对 db 的更改不会因错误而回滚(尽管我已经定义了这一事实,rollbackFor = Exception.class甚至在某些情况下使用过TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();,在这种情况下它尝试使用后者它抛出一个错误,指出不存在事务。2)我@Transactional在 Spring 中实例化的位置添加了断点,但没有一个被命中。
编辑:所以人们要求可重现的代码示例。问题不在于业务逻辑代码,我正在寻找在 Spring 2 控制器中使用注释的清晰性。所以我的例子是这样的:
public class ImportController extends SimpleFormController {
@Override
@Transactional(rollbackFor = Exception.class)
public ModelAndView onSubmit(HttpServletRequest request, HttpServletResponse response, Object command, BindException errors) throws Exception {
...
}
}