Spring事务管理
来源:互联网 发布:ubuntu没软件中心 编辑:程序博客网 时间:2024/05/21 22:54
Spring事务管理机制
Spring事务管理的四个优点: 1.提供一致的对于不同的事物管理的api 2.支持声明式事物管理 3.编程事务管理(开发中实际引用较少) 4.优秀的整合与Spring的数据访问Spring事务管理主要提供了三个接口来完成 1.org.springframework.transaction.PlatformTransactionManager 这是一个事物管理器,可以来选择相关的平台(jdbc hibernate jpa...) 2.TransactionDefinition 它定义事物的一些相关信息 例如,隔离,传播,超时,只读 3.TransactionStatus 它主要描述事务具体运行状态1.PlatformTransactionManager 平台事务管理器 在不同的持久层解决技术它的事物代码不一样 JDBC开发 Connection con=... con.setAutoComit(false);开启事务 con.rollback(); con.commit(); Hibernate开发 Session session=... Transaction t=session.beginTransaction(); t.commit(); t.rollback(); PlatformTransactionManager接口API 不同的平台使用不同的接口实现类 DataSourceTransactionManager--主要针对jdbcTemplate开发--Mybatls开发 HibernateTransactionManasger--主要针对Hibernate开发 JpaTransactionManager--主要针对JPA开发2.TransactionDefinition 它描述的是事务的定义信息,其中隔离,传播,超时,只读... 在TransactionDefinition中定义了大量的常量 事物的四个特性 ACID 原子性 一致性 隔离性 持久性 不考虑事物隔离性会有:脏读,不可重复读,虚读(幻读) ISOLATION_DEFUALT 它使用后端数据库的默认隔离级别(Spring中选项) ISOLATION_READ_UNCOMMITTED 不能解决问题,会发生脏读,不可重复读,虚读 ISOLATION_READ_COMMITTED 可以解决脏读 会产生不可重复读与虚读 ISOLATION_REPEATABLE_READ 可以解决脏读,不可重复读,不能解决虚读 ISOLATION_SERIALIZABLE 串行化,可以解决所有问题 对于不同的数据库,底层默认事务隔离级别将不一样 Oracle数据库默认为:read committed Mysql数据库默认为:repeatable_read 超时 默认值为-1,它使用的就是数据库默认的超时时间 只读 它只有两个true/false,如果选择true一般是在select中操作 传播 它解决的是两个事物管理的方法互相的调用,他与数据库没有关系,是程序内部维护的问题 传播行为: propagation_required 默认值 两个操作处于同一个事物,如果之前没有事务,新建一个事物 propagation_requires_new 两个操作处于不同的事务 propagation_nested 他是一种嵌套事务,他是使用savePoint来实现的.事务回滚时可以回滚到指定的savepoint,它只对DataSourceTransactionManager有作用3.TransactionStatus 定义事务状态信息,在事物运行过程中,得到某个时间点的状态 isNewTransaction(); hasSavepoint(); setRollbackOnly(); isRollbackOnly(); flush(); isCompleted();
声明式事物管理
事物关联方式 1.编码方案 不建议使用,它具有侵入性.在原有的业务代码基础上去添加事物管理代码 2.声明式事务控制,基于AOP对目标进行代理,添加AROUND环绕通知. 它不具有侵入性
xml配置声明式事务管理方案
第一步:applicationContext.xml文件中添加aop与tx的名称空间第二步:在applicationContext.xml文件中配置,Spring提供advice是传统的spring advice 1.配置事物管理器,根据平台不同选择不同的方法,DataSourceTransactionManager配置一个bean,然后连接c3p0的配置,注入dataSource 2.配置通知,Spring为我们提供了一个Transactionlnterceptor来完成增强,tx:advice,transaction-manager=""连接事务管理器,tx:attributes,其中name属性是必须配置的,用来确定增强的方法名或那些方法. isolation--可选 设置事务隔离级别,默认是default propagetion--可选 设置事务传播默认值required timeout--可选 超时时间默认-1 read-only--可选 默认值是false如果不是只读,它可以对insert update delete 操作,如果是只读不可以. rollback-for--可选 可以设置一个异常,如果产生异常,触发事务回滚 no-rolback-for--可选 可以设置一个异常,如果产生异常,不会触发事务回滚第三部:配置切面,aop:config--aop:pointcut , aop:advisor,其中要execution选择要增强的方法,给出id,然后在绑定通知,在绑定要增强的方法
阅读全文
0 0
- 事务管理之Spring事务管理
- Spring事务管理
- spring事务管理
- Spring事务管理
- Spring事务管理
- Spring事务管理
- Spring事务管理
- Spring事务管理
- Spring 事务管理
- Spring事务管理
- spring 事务管理
- spring 事务管理
- spring 事务管理
- spring事务管理
- Spring 事务管理
- Spring事务管理
- spring事务管理
- spring 事务管理
- android 自定义控件之AutoCompleteTextView邮箱后缀自动补全
- [iOS] HealthKit 睡眠分析
- Can't open lib '/usr/lib64/libmyodbc5.so' : file not found
- linux令普通用户拥有root权限
- 微信开发(1):VM331:2 未找到 pages/index/index.wxml 文件
- Spring事务管理
- 更改datatables的分页切换时的'processing'提示信息的式样
- Linux之ssh,scp命令的使用
- ACM训练计划
- 一台linux服务器配置多个tomcat
- 如何在Linux 命令行终端分屏
- ava面向对象笔记(五分钟秒懂)
- 图像几何变换(geometric transformation)
- shell1