1、
详解Java的Spring框架中的事务管理方式
基于aop的声明性事务处理
简述:用了一个非常详细的例子讲解:Spring的编程性事务处理、声明性事务处理,只讲两个例子,不用把所有的场景列出来,作为初学者,我感觉最好的一篇。
在Spring基于aop的声明性事务处理产生前,基于JTA的事务管理将事务管理与数据处理的逻辑混在一起,代码高度耦合;而基于EJB的CMT声明性事务管理,强制要求引入EJB容器的支持,也有很大的限制;Spring提供的就很不错。
编程式事务管理:基于PlatformTransactionManager接口
public interface PlatformTransactionManager {
TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException;
void commit(TransactionStatus status) throws TransactionException;
void rollback(TransactionStatus status) throws TransactionException;
}
//1.获取事务管理器
PlatformTransactionManager txManager = (PlatformTransactionManager) ctx.getBean("txManager");
//2.定义事务属性
DefaultTransactionDefinition td = new DefaultTransactionDefinition();
td.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
//3开启事务,得到事务状态
TransactionStatus status = txManager.getTransaction(td);
try {
//4.执行数据库操作
System.out.println(jdbcTempate.queryForInt("select count(*) from tbl_doc"));
//5、提交事务
txManager.commit(status);
}catch (Exception e) {
//6、回滚事务
txManager.rollback(status);
}
//1.获取事务管理器
PlatformTransactionManager txManager = (PlatformTransactionManager) ctx.getBean("txManager");
//2、定义事务管理的模板
TransactionTemplate transactionTemplate = new TransactionTemplate(txManager);
//3.定义事务属性
transactionTemplate.setIsolationLevel(TransactionDefinition.ISOLATION_READ_COMMITTED);
//4.回调,执行真正的数据库操作,如果需要返回值需要在回调里返回
transactionTemplate.execute(new TransactionCallback() {
@Override
public Object doInTransaction(TransactionStatus status) {
//5.执行数据库操作
System.out.println(jdbcTempate.queryForInt("select count(*) from tbl_doc"));
return null;
}
});
基于aop的声明性事务处理
3、讲解ThreadLocal非常好的文章