Spring对事务管理的支持的发展历程--转
Spring -- 支持 发展 历程 事务管理
2023-09-11 14:21:40 时间
原文地址:http://www.iteye.com/topic/1123049
1、问题
- Connection conn =
- DataSourceUtils.getConnection();
- //开启事务
- conn.setAutoCommit(false);
- try {
- Object retVal =
- callback.doInConnection(conn);
- conn.commit(); //提交事务
- return retVal;
- }catch (Exception e) {
- conn.rollback();//回滚事务
- throw e;
- }finally {
- conn.close();
- }
- Session session = null;
- Transaction transaction = null;
- try {
- session = factory.openSession();
- //开启事务
- transaction = session.beginTransaction();
- transation.begin();
- session.save(user);
- transaction.commit();//提交事务
- } catch (Exception e) {
- e.printStackTrace();
- transaction.rollback();//回滚事务
- return false;
- }finally{
- session.close();
- }
2、高层次解决方案(编程式实现事务)
- 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);
- }
3、高层次解决方案(模板解决方案)
- //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;
- }
- });
4、AOP解决方案
nSpring框架提供了一致的事务管理抽象,这带来了以下好处:
1:为复杂的事务API提供了一致的编程模型,如JTA、JDBC、Hibernate、JPA和JDO
2:支持声明式事务管理
3:提供比复杂的事务API(诸如JTA)更简单的、更易于使用的编程式事务管理API
4:非常好地整合Spring的各种数据访问抽象
实施事务的步骤
1、定义(资源)DataSource/SessionFactory……
2、定义事务管理器(管理资源的事务)
3、定义事务通知:定义了如何实施事务(实施事务的方法名和对应的事务属性),需要使用事务管理器管理事务,定义了如何选择目标对象的方法及实施的事务属性
4、定义advisor(切入点和事务通知):切入点选择需要实施事务的目标对象
5、Spring织入事务通知到目标对象(AOP代理)
实施流程:
![](http://dl.iteye.com/upload/attachment/0066/6245/a7d8d493-e387-34e9-a637-8a4d8d438602.jpg)
![](http://dl.iteye.com/upload/attachment/0066/6247/d33ee177-cf3f-39cc-befe-533306b0715f.jpg)
![点击查看原始大小图片](http://dl.iteye.com/upload/attachment/0067/0898/ec336a65-7626-3994-b1de-f25e94a70a79.jpg)
![点击查看原始大小图片](http://dl.iteye.com/upload/attachment/0067/0902/a3cd0fba-c363-3d9a-b697-1e1ab446b9b9.jpg)
![点击查看原始大小图片](http://dl.iteye.com/upload/attachment/0066/0970/632fd877-8165-3a60-ae7e-6429da8ed136.jpg)
相关文章
- Spring Batch 批处理框架
- 从Spring迁移到Spring Boot
- 从头认识Spring-1.16 SpEl对集合的操作(1)-建立集合以及訪问集合的元素,以<util:list/>为例
- 8 -- 深入使用Spring -- 8...1 Spring提供的DAO支持
- 8 -- 深入使用Spring -- 6...3 使用@Transactional
- 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式
- Spring Security(08)——intercept-url配置
- Spring Security 5.7 最新配置细节(直接就能用),WebSecurityConfigurerAdapter 已废弃
- spring mvc -- HttpMessageConverter、DispatcherServlet、Validator---@RequestBody @respondBody
- Spring Boot filter
- spring mvc基础环境thymeleaf模板引用(一)
- Spring之IOC实现原理
- pom.xml activatedProperties --spring.profiles.active=uat 对应
- postman传递对象到spring controller的方式
- Scalable, Distributed Systems Using Akka, Spring Boot, DDD, and Java--转
- Spring Annotation Processing: How It Works--转
- spring transaction源码分析--事务架构
- Spring RESTFul Client – RestTemplate Example--转载
- Spring JTA multiple resource transactions in Tomcat with Atomikos example--转载
- 注释驱动的 Spring cache 缓存介绍--转载
- verview of Spring Framework--转
- spring beans源码解读之--BeanFactory进化史
- Injecting and Binding Objects to Spring MVC Controllers--转
- 曹工说Spring Boot源码(16)-- Spring从xml文件里到底得到了什么(aop:config完整解析【上】)
- 曹工说Spring Boot源码(14)-- AspectJ的Load-Time-Weaving的两种实现方式细细讲解,以及怎么和Spring Instrumentation集成
- 曹工说Spring Boot源码系列开讲了(1)-- Bean Definition到底是什么,附spring思维导图分享
- spring应用中多次读取http post方法中的流(附源码)
- 《spring揭秘》笔记