【发布时间】:2020-06-15 13:42:41
【问题描述】:
我的应用程序中有一个旧控制器,它在 xml 中定义为 spring bean,并使用 Spring 的 SimpleFormController。我试图通过添加@Transactional 注释使控制器的onSubmit 方法中的进程具有事务性,但它不起作用。根据this guide,注解的调用必须发生在“bean 之外”,这是否意味着注解不能在像我这样的旧 Spring 控制器中使用?是否有任何替代方案或解决方法?
我知道它不起作用的原因是因为 1) 对数据库的更改不会因错误而回滚(尽管我已经定义了 rollbackFor = Exception.class,甚至在某些情况下使用了 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();,在此在尝试使用后者的情况下,它会抛出一个错误,指出不存在事务。2) 我在 Spring 中实例化 @Transactional 的位置添加了断点,并且没有一个被命中。
编辑:所以人们要求可重现的代码示例。问题不在于业务逻辑代码,我正在寻找关于 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 {
...
}
}
【问题讨论】:
-
@Lino 这是一个方法的注释,我在这里没有可以给你的可重现的例子,特别是因为代码是商业敏感的,我不能在公共论坛上发布它,它不会t 提供有关问题所在的任何指示。
-
可重现示例的目的之一是让 asker 更好地理解问题。您首先创建一个简单的示例,它可以工作,因此您可以通过逐渐从示例移到实际代码中的配置来检查示例和实际代码之间的差异。否则它将不起作用,您在此处发布简单示例,以便我们提供帮助。如果没有看到不起作用的代码,恐怕很难理解问题并提供帮助。
-
@RomanKonoval 我拥有的业务逻辑代码不是问题,它是我需要澄清的弹簧控制器中注释的使用。我可以发布一些伪代码,但你会发现它对任何人都没有好处。
标签: java spring spring-transactions