事务的传播行为
事务的传播行为
事务的传播行为有七种 (我从网上直接拷贝的话,大家可以结合下面的代码理解)
PROPAGATION.REQUIRED-------- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION.SUPPORTS --------支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION.MANDATORY -------------支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION.REQUIRES NEW ---------- 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION.NOT_SUPPORTED ---------以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION.NEVER -------------- 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION.NESTED – 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,就新建一个事务。
通过代码讲解传播行为
1、创建日志表
CREATE TABLE `logs` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`log` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
2、创建logDao和logService
@Repository
public class LogDao {
@Autowired
private JdbcTemplate jdbcTemplate;
/**
* 插入日志信息到数据库种
*/
public void recordLog(){
String sql = "insert into logs(log) values(?)";
jdbcTemplate.update(sql,UUID.randomUUID().randomUUID().toString());
}
}
@Service
public class LogService {
@Autowired
private LogDao logDao;
public void recordLog(){
logDao.recordLog();
System.out.println("记录日志成功!");
}
}