ps:mysql中查看正在运行的事务的语句是:

1
SELECT * FROM information_schema.innodb_trx;

查询所有事务的语句(这个会将所有信息放到Status字段里):

1
SHOW ENGINE INNODB STATUS;

方法一:

使用PlatformTransactionManagerTransactionDefinition

具体的使用方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
// 事务管理器
@Autowired
private PlatformTransactionManager platformTransactionManager;

// 事务的一些基础信息,如超时时间、隔离级别、传播属性等
@Autowired
private TransactionDefinition transactionDefinition;

// 创建一个事务状态
TransactionStatus transactionStatus = platformTransactionManager.getTransaction(transactionDefinition);
try{
// 省略业务代码

// 提交事务
platformTransactionManager.commit(transactionStatus);
}catch (Exception e) {
// 发生错误,回滚事务
platformTransactionManager.rollback(transactionStatus);
}

方法二:

使用TransactionAspectSupport@Transactional注解

使用方法如下:

1
2
3
4
5
6
7
8
9
10
11
@Transactional(rollbackFor = Exception.class)
public void method(){
// 创建回滚点
Object savepoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();
try{
// 省略业务代码
}catch (Exception e) {
// 发生错误,回滚事务
TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savepoint);
}
}