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,然后在绑定通知,在绑定要增强的方法
原创粉丝点击