`

事务学习1 配置为主

阅读更多

 

 

spring事务管理

 

      6.1、spring的事务管理器

 

Spring框架并没有直接管理用户的应用系统中的事务,它只是提供许多供用户选择的事务管理器,然后将事务管理的责任委托给与此事务管理器对应的持久化技术的事务实现。 

 

事务管理实现

使用时机

org.springframework.jdbc.datasource.

DataSourceTransactionManager

在单一的JDBC DataSource中管理事务

org.springframework.orm.hibernate3.HibernateTransactionManager

当持久化机制是Hibernate时,用它来管理职务

org.springframework.orm.jpa.JpaTransactionManager

当JPA用作持久化时,用它来管理职务

org.springframework.transaction.jta.JtaTransactionManager

使用一个JTA实现来管理事务。在一个事务跨越多个资源时必须使用

 

配置文件中的配置如下:

 

<bean id=”transactionManager” class=” org.springframework.jdbc.datasource. DataSourceTransactionManager”>

                   <property name=”dataSource” ref=” dataSource”/>

</bean>

 

         6.2、事务属性介绍

 

         1>.传播行为

 

传播行为

说明

PROPAGATION_REQUIRED

必须在一个事务中执行。如果当前有一个事务正在进行,该方法将会在那个事务中执行。否则要开始一个新事务。Spring事务传播行为的默认值。

PROPAGATION_SUPPORTS

支持现有的事务。如果当前没有事务在进行,就以非事务的方式执行

PROPAGATION_MANDATORY

方法必须在一个现有事务中进行,否则会抛出异常。

PROPAGATION_REQUIRES_NEW

必须在它自己的新启事务里进行。如果现有事务在进行就先暂停它

PROPAGATION_NOT_SUPPORTED

不应在事务中进行。如果现有事务在进行就先暂停它

PROPAGATION_NEVER

不应在事务中进行。如果现有事务在进行就抛出异常

PROPAGATION_NESTED

如果现有事务正在进行,则该方法运行在一个嵌套式事务中。否则PROPAGATION_REQUIRED执行

 

         2>.隔离级别

 

 

隔离级别

说明

ISOLATION_DEFAULT

使用底层数据库默认的隔离级别spring事务隔离级别的默认值

ISOLATION_READ_UNCOMMITED

充许另一个事务可以读到这个事务未提交的数据可能导致脏读、不可重复读和幻读。

ISOLATION_READ_COMMITED

保证一个事务修改的数据提交后才能被另一个事务读取可能导致不可重复读和幻读。

ISOLATION_REPEATABLE_READ

要求对相同字段的多次读取的结果必须相同,除非事务本身更新了数据可能导致幻读。

ISOLATION_SERIALIZABLE

事务被处理为顺序执行可以防止脏读、不可重复读、幻读。

 

         3>.只读提示

 

         如果事务只对后端数据进行读操作,则后端数据库可以采用一些优化措施来提高执行效率。但必须在事务中才有效。也就是说要搭配传播行为PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW,PROPAGATION_NESTED 来设置。

 

         4>.事务超时间隔

 

         还可以设置事务的超时间隔,让事务在特定秒数后自动回滚,不必等它自己结束。由于计时是从事事务开始时算起的,所以它也得搭配传播行为为 PROPAGATION_REQUIRED,PROPAGATION_REQUIRES_NEW,PROPAGATION_NESTED 来设置。

 

         5>.回滚规则

 

         当事务运行过程中抛出异常时,事务可以被声明为回滚或者不回滚。默认情况下只在出现RuntimeExceptio才会回滚,而在出现受检异常时不回滚。

         当然,也可以改变这种回滚规则,可以声明一个事务在出现特定的受检异常时能回滚。也可以声明一个事务在出现特定的非受检异常时不回滚。

 

      6.3、声明式事务管理

 

          1>.基于xml配置方式

 

                   第1步:定义事务通知

  

 

      第2部:把事务通知绑定到切入点

 

Xml代码  

<?xml version="1.0" encoding="UTF-8"?>  

  

<beans xmlns="http://www.springframework.org/schema/beans"  

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

        xmlns:aop="http://www.springframework.org/schema/aop"  

        xmlns:tx="http://www.springframework.org/schema/tx"  

        xsi:schemaLocation="  

            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  

            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  

            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  

      

    <!-- 配置不带连接池的数据源 -->  

    <bean id="dataSource"   

          class="org.springframework.jdbc.datasource.DriverManagerDataSource">  

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />  

        <property name="url" value="jdbc:mysql:///spring" />  

        <property name="username" value="root" />  

        <property name="password" value="123" />  

    </bean>  

      

    <!-- JDBC事务管理器 -->  

    <bean id="transactionManager"   

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  

        <!-- DataSource事务管理器需要数据源实例 -->  

        <property name="dataSource" ref="dataSource"/>  

    </bean>  

      

    <!-- 第1步:定义事务通知(主要是针对指定事务管理器对应的事务实现配置事务参数) -->  

    <tx:advice id="txAdvice" transaction-manager="transactionManager">  

        <tx:attributes>  

            <!-- 对选定的方法配置详细的事务属性 -->  

            <tx:method name="find*" read-only="true" />  

            <tx:method name="*"/>  

        </tx:attributes>  

    </tx:advice>  

 

     <!-- 配置哪些类的方法需要进行事务管理  最好不要设置到dao层 ,可以设置到 业务层-->     包名称 能模糊

        <!--  返回值  包名字  类名字  方法名字(参数情况)  * com.company.*.*(..)  表示所有的返回值  com.company包         下的所有的类 所有的方法  方法的参数不限-->

      

    <!--  第2步:AOP配置 -->  

    <aop:config>  

        <!--  声明事务切入点(配置哪些类的哪些方法参与事务) -->   

        <aop:pointcut id="AllServiceMethod"   

                expression="execution(* com.zxf.service.*.*(..))" />   

        <!-- 通知器(把事务通知绑定到切入点) -->  

        <aop:advisor pointcut-ref="AllServiceMethod" advice-ref="txAdvice" />   

    </aop:config>  

      

      

    <!-- 以下是Spring容器管理的Bean -->  

    <bean id="accountDao" class="com.zxf.dao.AccountDaoJDBCImpl">  

        <property name="dataSource" ref="dataSource" />  

    </bean>  

    <bean id="accountService" class="com.zxf.service.AccountService">  

        <property name="accountDao" ref="accountDao"/>  

    </bean>  

      

    <!-- Hibernate事务管理器  

    <bean id="txManager2"     

         class="org.springframework.orm.hibernate3.HibernateTransactionManager">  

        <property name="sessionFactory" ref ="sessionFactory"/>  

    </bean>  

    -->   

    <!-- JPA事务管理器  

    <bean id="txManager3"     

         class="org.springframework.orm.jpa.JpaTransactionManager">  

        <property name="entityManagerFactory" ref ="entityManagerFactory"/>  

    </bean>  

    -->   

</beans>  

 

 

事务管理器一共有5种:

        DataSourceTransactionManager           JDBC事务管理器 

        HibernateTransactionManager            Hibernate事务管理器 

        JdoTransactionManager                  JDO事务管理器 

        JtaTransactionManager                   JTA事务管理器      

        PersistenceBrokerTransactionManager    Apache的OJB事务管理器     

 

 

 

   2>.基于注解方式

      第1步:在spring配置文件中启用对AspectJ注解的支持

 

 

Xml代码  

<?xml version="1.0" encoding="UTF-8"?>  

  

<beans xmlns="http://www.springframework.org/schema/beans"  

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  

        xmlns:aop="http://www.springframework.org/schema/aop"  

        xmlns:tx="http://www.springframework.org/schema/tx"  

        xsi:schemaLocation="  

            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd  

            http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd  

            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">  

      

    <!-- 配置不带连接池的数据源 -->  

    <bean id="dataSource"   

          class="org.springframework.jdbc.datasource.DriverManagerDataSource">  

        <property name="driverClassName" value="com.mysql.jdbc.Driver" />  

        <property name="url" value="jdbc:mysql:///spring_04" />  

        <property name="username" value="root" />  

        <property name="password" value="root" />  

    </bean>  

      

    <!-- JDBC事务管理器 -->  

    <bean id="transactionManager"   

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  

        <!-- DataSource事务管理器需要数据源实例 -->  

        <property name="dataSource" ref="dataSource"/>  

    </bean>  

    <!-- 启用对事务注解的支持  -->  

    <tx:annotation-driven transaction-manager="transactionManager"/>  

      

      

    <!-- 以下是Spring容器管理的Bean -->  

    <bean id="accountDao" class="com.zxf.dao.AccountDaoJDBCImpl">  

        <property name="dataSource" ref="dataSource" />  

    </bean>  

    <bean id="accountServiceByTxAnnotation"   

          class="com.zxf.service.AccountServiceByTxAnnotation">  

        <property name="accountDao" ref="accountDao"/>  

    </bean>  

</beans>  

 

    第2步:用@Transactional注解指定接口、类或方法的事务属性

 

package com.zxf.service;  

  

import java.util.List;  

import org.springframework.transaction.annotation.Transactional;  

  

import com.zxf.dao.AccountDao;  

import com.zxf.domain.Account;  

  

/** Account业务逻辑类--基于注解方式的声明式事务管理配置 */  

@Transactional //指定需要声明式事务,事务属性使用默认值  

public class AccountServiceByTxAnnotation {  

    private AccountDao accountDao;  

    public void setAccountDao(AccountDao accountDao){  

        this.accountDao = accountDao;  

    }  

}  

Java代码  

package com.zxf.service;  

  

import java.util.List;  

import org.springframework.transaction.annotation.Transactional;  

  

import com.zxf.dao.AccountDao;  

import com.zxf.domain.Account;  

  

/** Account业务逻辑类--基于注解方式的声明式事务管理配置 */  

@Transactional //指定需要声明式事务,事务属性使用默认值  

public class AccountServiceByTxAnnotation {  

    private AccountDao accountDao;  

    public void setAccountDao(AccountDao accountDao){  

        this.accountDao = accountDao;  

    }  

}  

 

 

 

 <!-- 配置哪些类的方法需要进行事务管理  最好不要设置到dao层 ,可以设置到 业务层-->     包名称 能模糊

        <!--  返回值  包名字  类名字  方法名字(参数情况)  * com.company.*.*(..)  表示所有的返回值  com.company包 下的所有的类 所有的方法  方法的参数不限-->

 

资料来自网站:http://z-xiaofei168.iteye.com/blog/1044843

分享到:
评论

相关推荐

    ssm整合以及相关练习文档

    有助于学习ssm框架 Spring 支持两种类型的事务管理: 1.编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。...版权声明:本文为博主原创文章,转载请附上博文链接!

    jsp servlet 入门学习资料-新手一看就懂

    3.4.1 Tomcat的主配置文件:server.xml 3.4.2 Windows下代码保护的问题 3.4.3 Apache、IIS和Tomcat协作时工作 目录的添加 3.4.4 设定Tomcat作为Windows的服务而启动 3.4.5 在Tomcat中建立新的Web应用程序 第4章...

    《计算机应用基础》课程标准.docx

    《计算机应用基础》课程标准 【课程名称】 《计算机应用基础》 1、课程性质与设计思路 课程性质 《计算机应用基础》是中职学校的计算机基础课,所涉及的学生人数多、专业面广、影响大,并为后继课程的学习打基础。...

    校园网络安全.doc

    学 校学习以自主性学习为主,决定了高校学生可供自主支配的时间宽裕。这使校园网的使用 率大大增加,这就需要校园网的承载和网络更为稳定, (2)校园网安全和维护的需求。一方面用户网络安全意识、版权意识普遍较为...

    计算机专业学习

    它对于图书馆的管理者和使用者都非常重要,所以图书馆管理系统应该为管理者与读者提供充足的信息和快捷的数据处理手段,但长期以来,人们使用传统的人工方式或性能较低的图书馆管理系统管理图书馆的日常事务,操作...

    TCP-IP详解卷1:协议

    24.7 T/TCP:为事务用的TCP扩展 265 24.8 TCP的性能 267 24.9 小结 268 第25章 SNMP:简单网络管理协议 270 25.1 引言 270 25.2 协议 270 25.3 管理信息结构 272 25.4 对象标识符 274 25.5 管理信息库介绍 274 25.6 ...

    TCP_IP详解卷1

    24.7 T/TCP:为事务用的TCP扩展 265 24.8 TCP的性能 267 24.9 小结 268 第25章 SNMP:简单网络管理协议 270 25.1 引言 270 25.2 协议 270 25.3 管理信息结构 272 25.4 对象标识符 274 25.5 管理信息库介绍 274 25.6 ...

    PHP和MySQL Web开发第4版pdf以及源码

    16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3 连接服务器 16.6.4 运行服务器 16.7 保护网络 16.7.1 安装防火墙 16.7.2使用...

    PHP和MySQL Web开发第4版

    16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3 连接服务器 16.6.4 运行服务器 16.7 保护网络 16.7.1 安装防火墙 16.7.2使用...

    软件工程工资管理系统

    根据工资管理系统的要求,为保持数据的完整性,采用了数据库的事务机制,防止出现操作故障引起的数据不一致。 3 概念结构设计 3.1设计方法和步骤 采用自底而上的设计方法。先自顶向下地进行需求分析,对工资管理...

    PHP和MySQL WEB开发(第4版)

    16.5.3 Web服务器配置 16.5.4 Web应用的商业主机服务 16.6 数据库服务器的安全性 16.6.1 用户和权限系统 16.6.2发送数据至服务器 16.6.3 连接服务器 16.6.4 运行服务器 16.7 保护网络 16.7.1 安装防火墙 16.7.2使用...

    数据库学习基础之名词解释

    SQLServer是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。 其主要特点如下:  (1)高性能设计,可充分利用...

    AL_Train:学徒学习者代理基于CTAT HTML的培训工具的存储库

    AL_Core ( ),这是用于学习者建模的核心库,用于配置和实例化代理以及编写其背景知识。 AL_Train (此存储库),包含用于将AL代理与CTAT-HTML辅导员接口并运行培训实验的代码。 AL_Outerloop ( ),它为AL_...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

     事务控制语言(Transactional Control Language,TCL),用于维护数据的一致性,包括COMMIT(提交事务)、ROLLBACK(回滚事务)和SAVEPOINT(设置保存点)3条语句 二、 Oracle的数据类型 类型 参数 描述 字符类型...

    asp.net知识库

    将 ASP.NET 2.0 应用程序服务配置为使用 SQL Server 2000 或 SQL Server 2005 ASP.NET 2.0 中的数据源控件 使用 ASP.NET 2.0 ObjectDataSource 控件 ASP.NET 2.0 的内部变化 使用SQL Cache Dependency 代替 ...

    TCPIP详解(卷1协议)

    24.7 T/TCP:为事务用的TCP扩展 265 24.8 TCP的性能 267 24.9 小结 268 第25章 SNMP:简单网络管理协议 270 25.1 引言 270 25.2 协议 270 25.3 管理信息结构 272 25.4 对象标识符 274 25.5 管理信息库介绍 274 25.6 ...

Global site tag (gtag.js) - Google Analytics