一、DefaultTransactionDefinition (已经测试通过)
//定义事务隔离级别,传播行为
DataSourceTransactionManager txManager = new DataSourceTransactionManager();
Context initContext = null;
DataSource ds = null;
try {
initContext = new InitialContext();
// 拿到 jndi 数据源对象
ds = (javax.sql.DataSource) initContext.lookup("jndi 数据源名称");
} catch (NamingException e) {
e.printStackTrace();
}
txManager.setDataSource(ds);
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
def.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
//事务状态类,通过PlatformTransactionManager的getTransaction方法根据事务定义获取;获取事务状态后,Spring根据传播行为来决定如何开启事务
TransactionStatus status = txManager.getTransaction(def);
JdbcTemplate jdbcTemplate = new JdbcTemplate(ds);
System.out.println();
try {
// 执行数据库语句1
jdbcTemplate.execute("数据库更新类语句1");
// 模拟异常
int c = 1 / 0;
// 执行数据库语句2
jdbcTemplate.execute("数据库更新类语句2");
//提交status中绑定的事务
txManager.commit(status);
} catch (RuntimeException e) {
//回滚
txManager.rollback(status);
}
二、