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