如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。详细解释在代码下方。
实例
员工service
@Service public class EmployeeServiceImpl implements EmployeeService { @Autowired EmployeeMapper employeeMapper; @Autowired DepartmentService departmentService; /** * 添加员工的同时添加部门 * REQUIRED 传播 * @param name 员工姓名 */ @Override @Transactional(propagation = Propagation.REQUIRED) public void addEmpByRequired(String name) { Employee employee = new Employee(); employee.setDeptId(1); employee.setName(name); employee.setAddress("邯郸"); employeeMapper.insertSelective(employee); departmentService.addDept("jishubu"); int i = 1/0; } }
部门service
@Service public class DepartmentServiceImpl implements DepartmentService { @Autowired DepartmentMapper departmentMapper; @Override public void addDeptByRequired(String name) { Department department = new Department(); department.setName(name); departmentMapper.insertSelective(department); // int i = 1/0; } }
注:该篇文章所测试的皆是运行addEmpByRequired方法。
支持当前事务,如果当前没有事务,就以非事务方式执行。
实例
员工service
@Override @Transactional(propagation = Propagation.REQUIRED) public void addEmpBySupports(String name) { Employee employee = new Employee(); employee.setDeptId(2); employee.setName(name); employee.setAddress("邯郸"); employeeMapper.insertSelective(employee); departmentService.addDeptBySupports("jishubu"); // int i = 1/0; }
部门Service
@Override @Transactional(propagation = Propagation.SUPPORTS) public void addDeptBySupports(String name) { Department department = new Department(); department.setName(name); departmentMapper.insertSelective(department); int i = 1/0; }
使用当前的事务,如果当前没有事务,就抛出异常。
员工Service
@Override // @Transactional(propagation = Propagation.REQUIRED) public void addEmpByMandatory(String name) { System.out.println("aaaaaa"); Employee employee = new Employee(); employee.setDeptId(3); employee.setName(name); employee.setAddress("邯郸"); employeeMapper.insertSelective(employee); departmentService.addDeptByMandatory("jishubu"); int i = 1/0; }
部门Service
@Override @Transactional(propagation = Propagation.MANDATORY) public void addDeptByMandatory(String name) { Department department = new Department(); department.setName(name); departmentMapper.insertSelective(department); int i = 1/0; }
@Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void addEmpByRequiresNew(String name) { Employee employee = new Employee(); employee.setDeptId(4); employee.setName(name); employee.setAddress("邯郸"); employeeMapper.insertSelective(employee); departmentService.addDeptByRequiresNew("jishubu"); int i = 1/0; }
部门Service
@Override @Transactional(propagation = Propagation.REQUIRES_NEW) public void addDeptByRequiresNew(String name) { Department department = new Department(); department.setName(name); departmentMapper.insertSelective(department); // int i = 1/0; }
以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
员工Service
@Override @Transactional(propagation = Propagation.REQUIRED) public void addEmpByNotSupported(String name) { Employee employee = new Employee(); employee.setDeptId(5); employee.setName(name); employee.setAddress("邯郸"); employeeMapper.insertSelective(employee); departmentService.addDeptByNotSupported("jishubu"); int i = 1/0; }
部门Service
@Override @Transactional(propagation = Propagation.NOT_SUPPORTED) public void addDeptByNotSupported(String name) { Department department = new Department(); department.setName(name); departmentMapper.insertSelective(department); int i = 1/0; }
以非事务方式执行,如果当前存在事务,则抛出异常。
员工Service
@Override @Transactional(propagation = Propagation.REQUIRED) public void addEmpByNever(String name) { Employee employee = new Employee(); employee.setDeptId(6); employee.setName(name); employee.setAddress("邯郸"); employeeMapper.insertSelective(employee); departmentService.addDeptByNever("jishubu"); int i = 1/0; }
部门Service
@Override @Transactional(propagation = Propagation.NEVER) public void addDeptByNever(String name) { Department department = new Department(); department.setName(name); departmentMapper.insertSelective(department); int i = 1/0; }
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。(这个和REQUIRED区别在于一个是加入到一个事务,一个是在嵌套事务运行)
员工Service
@Override @Transactional(propagation = Propagation.REQUIRED) public void addEmpByNested(String name) { Employee employee = new Employee(); employee.setDeptId(7); employee.setName(name); employee.setAddress("邯郸"); employeeMapper.insertSelective(employee); try { departmentService.addDeptByNested("jishubu"); }catch (Exception e){ } // int i = 1/0; }
部门Service
@Override @Transactional(propagation = Propagation.NESTED) public void addDeptByNested(String name) { Department department = new Department(); department.setName(name); departmentMapper.insertSelective(department); int i = 1/0; }
原文:https://www.cnblogs.com/myseries/p/11839804.html