虽然不简单但还是要学的JavaWeb—spring事务管理

来源:互联网 发布:交换机每个端口的带宽 编辑:程序博客网 时间:2024/05/16 17:45

spring 事物管理
什么是事务:事务就是逻辑上的一组操作,这组操作的各个执行单元,要么全部完成,要么全部失败,体现在代码中,可以将一次转账看作是一个事务。

事务的特性:
1.原子性
即组成事务的一组操作,要么全部执行,要么全部不执行,不能单独的进行某个操作。
2.一致性
即事务执行前后,数据库中的数据保持一致
3.隔离性
即事务之间相互隔离,如不能再一个事物写数据的时候另一个事务读数据
根据不同的隔离性,能出现的安全问题有

脏读:一个事务读到了另一个事务未提交的数据。
不可重复读:一个事务范围内多次的对一个数据进行读取,却读到了不同的数据值。
原因:该数据在读取的过程中被另一个事务修改并提交。
虚读(幻读):因两个事务或多个事务的操作,导致产生的结果不符合某事物的要求,(如,事务A更改某数据,事务B又改回来,事务A再次查询发现:我明明改了,为啥没变)

4.持久性
对于已提交的数据,即使系统损坏,或者数据库异常关闭,也不能影响其中的已更改的数据,也就是说,已提交的事物的更新,可以通过备份或者其他方式来找到,而不怕数据的丢失。

 /*
  * 2017/10/15更
  */

spring 事务管理的三大接口

1.PlatFormTransactionDefinition —— 平台事务管理器
根据Dao层框架不同,可以选择不同的实现类

2.TransactionDefinition —— 事务定义信息
定义事务的隔离级别
定义事务的传播行为
定义事务的超时信息
定义事务是否只读等

3.TransactionStatus —— 事务的具体运行状态

spring事务管理的两种方式

基础配置

1.配置dao层数据源(这里使用dataSourceTransactionManager)<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">    <property name="driverClassName" value="" />    <property name="url" value="" />    <property name="username" value="" />    <property name="password" value="" /></bean>2.配置平台事务管理器(TransactionManager)<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    <property name="dataSouce" ref="dataSource"></bean>

1.编程式的事务管理

//提供事务模板<bean id="transactionTemplate" class="org.springframework.transaction.support.TransactionTemplate">     <property name="transactionManager" ref="transactionManager"></bean>         

2.声明式的事务管理(重要)
1) 基于AspectJ的XML配置方式

<tx:advice id="myAdvice" transaction-manager="transactionManager">    <tx:attributes>        <tx:method name="outMoney" propagation="REQUIRED" />    </tx:attributes></tx:advice> --><!-- 配置AOP --><!-- <aop:config><aop:advisor advice-ref="myAdvice"        pointcut="execution(public * com.ruitaoad.*.outMoney(..))" /></aop:config>

2)基于AspectJ的注解方式

  ①开启事务注解  <tx:annotation-driven transaction-manager="transactionManager"/>  ②在业务层(业务的java文件)上添加注解@Transactional

————————2017/10/16

阅读全文
0 0
原创粉丝点击