//启动类上加 @MapperScan(basePackages = "com.xxx.mapper.*") @SpringBootApplication @EnableScheduling @EnableTransactionManagement //注解生效就加 public class SysWebApplication extends SpringBootServletInitializer //这个是测试 ------------------------- 添加修改删除 ----------------------------- @RequestMapping(value = "/save", method = RequestMethod.POST ) @Log("查看系统日志列表") @Transactional(propagation = Propagation.REQUIRED) public ResultBean save(){ demoMapper.insert(new Demo(11L,"1")); demoMapper.insert(new Demo(12L,"1")); demoMapper.insert(new Demo(13L,"1")); return ResultBean.ok(); } ------------------------- 查询 ----------------------------- @Transactional(propagation = Propagation.SUPPORTS) @RequestMapping(value = "/list", method = RequestMethod.GET ) @Log("查看系统日志列表") public ResultBean get(HttpServletRequest request, HttpServletResponse response) throws IOException { List all = demoService.seleDemo(); try{ return ResultBean.ok(all); }catch (Exception e){ e.printStackTrace(); } return null; }
传播行为
所谓事务的传播行为是指,如果在开始当前事务之前,一个事务上下文已经存在,此时有若干选项可以指定一个事务性方法的执行行为。
我们可以看 org.springframework.transaction.annotation.Propagation
枚举类中定义了6个表示传播行为的枚举值:
public enum Propagation { REQUIRED(0), SUPPORTS(1), MANDATORY(2), REQUIRES_NEW(3), NOT_SUPPORTED(4), NEVER(5), NESTED(6); }
REQUIRED
:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。SUPPORTS
:如果当前存在事务,则加入该事务;如果当前没有事务,则以非事务的方式继续运行。MANDATORY
:如果当前存在事务,则加入该事务;如果当前没有事务,则抛出异常。REQUIRES_NEW
:创建一个新的事务,如果当前存在事务,则把当前事务挂起。NOT_SUPPORTED
:以非事务方式运行,如果当前存在事务,则把当前事务挂起。NEVER
:以非事务方式运行,如果当前存在事务,则抛出异常。NESTED
:如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行;如果当前没有事务,则该取值等价于REQUIRED
。
指定方法:通过使用 propagation
属性设置,例如:
@Transactional(propagation = Propagation.REQUIRED)