关于Springboot在controller层加@Transactional注解,导致整个类无法访问的问题解决。
通常情况下,我们都是在service层实现的事务管理。但是在一些访问页面的controller方法中,需要使用事务。但是在方法上加上@Transactional注解,会导致访问整个controller的方法报404。一种解决方法如下:
**一,注入PlatformTransactionManager。 **
@Resource
private PlatformTransactionManager transactionManager;
二,测试的方法如下:
@RequestMapping("save")
@ResponseBody
public String save(Object a, Object b){
DefaultTransactionDefinition defaultTransactionDefinition = new DefaultTransactionDefinition();
defaultTransactionDefinition.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
TransactionStatus status = transactionManager.getTransaction(defaultTransactionDefinition);
try {
service.saveObjectA(a);
service.saveObjectB(b);
transactionManager.commit(status);
} catch (Exception e) {
e.printStackTrace();
transactionManager.rollback(status);
return "save failed";
}
return "save successful";
}
三,这样就实现了当saveObjectB()出现异常时,saveObjectA()对数据库的操作进行了回滚。
以上就是在controller的方法中加事务的例子,解决办法仅供参考。