MySQL默认的存储引擎为MyISAM不支持事务,需要改成InnoDB才能支持事务,此处如何查看与修改略过。
网上很多人说在启动类中加入@EnableTransactionManagement注解才能生效,但在实际的开发过程中发现不加也可以,原因是SpringBoot自动开启了事务
@Transactional注解能加在类或者方法上,优先级:方法>类
事务生效总结:
方法A调用方法B事务生效总结:
A有T B有T 生效
A有T B无T 生效
A无T B有T 不生效
小例子
@Transactional @Service public class DemoService { @Autowired private DemoDao demoDao; public void test(User user) { try{ demoDao.insert(user); int i = 1/0; } catch (Exception e) { // 事務已經回滾 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } } }