Spring事务失效的原因
所属分类 spring
浏览量 773
数据库引擎不支持事务
MySQL MyISAM 引擎不支持事务 ,InnoDB 才支持事务
MySQL 5.5.5 开始 默认存储引擎 InnoDB
没有被 Spring 管理
// @Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void updateOrder(Order order) {
// update order;
}
}
方法非public
@Transactional 只能用于 public 方法上,否则事务不会失效
自身调用
内部方法调用,没有经过 Spring 的代理类,在外部调用事务才会生效
@Service
public class OrderServiceImpl implements OrderService {
public void update(Order order) {
updateOrder(order);
}
@Transactional
public void updateOrder(Order order) {
// update order;
}
}
@Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void update(Order order) {
updateOrder(order);
}
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void updateOrder(Order order) {
// update order;
}
}
数据源没有配置事务管理器
非事务方式
Propagation.NOT_SUPPORTED
@Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void update(Order order) {
updateOrder(order);
}
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void updateOrder(Order order) {
// update order;
}
}
Propagation.NOT_SUPPORTED 表示不以事务运行,当前若存在事务则挂起
异常被吃掉,没有抛出
@Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void updateOrder(Order order) {
try {
// update order;
}catch (Exception e){
//do something;
}
}
}
异常类型不匹配或配置错误
@Service
public class OrderServiceImpl implements OrderService {
@Transactional
// @Transactional(rollbackFor = SQLException.class)
public void updateOrder(Order order) {
try { // update order
}catch (Exception e){
throw new Exception("更新错误");
}
}
}
默认回滚 RuntimeException
@Transactional(rollbackFor = Exception.class)
上一篇
下一篇
python Simple HTTP Server
go程序设计语言01_03入门之查找重复的行
HikariCP为什么这么快
Lombok的一些坑
GO获取变量类型
go基本语法例子