数据库引擎支持
MySQL InnoDB 支持事务,MyISAM 不支持
MySQL 5.5.5 开始默认使用 InnoDB
Bean 没有被Spring管理
// @Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void updateOrder(Order order) {
// update order
}
}
方法不是 Public 的
@Transactional 只作用于 public 方法
自调用问题
因为 @Transactional 实现需要动态代理Bean,自己调用使用的是自己的类,没有用代理类
@Service
public class OrderServiceImpl implements OrderService {
public void update(Order order) {
updateOrder(order);
}
@Transactional
public void updateOrder(Order order) {
// update order
}
}
数据源没有配置事务管理器
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource) {
return new DataSourceTransactionManager(dataSource);
}
事务传播配置不对
@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
}
}
异常被 catch 了
// @Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void updateOrder(Order order) {
try {
// update order
} catch {
}
}
}
异常类型不对
事务默认回滚的是 RuntimeException,如果需要触发别的需要配置 @Transactional(rollbackFor = Exception.class)
// @Service
public class OrderServiceImpl implements OrderService {
@Transactional
public void updateOrder(Order order) {
try {
// update order
} catch {
throw new Exception("更新错误");
}
}
}