Spring实现事务的处理
来源:互联网 发布:新疆英吉沙小刀淘宝店 编辑:程序博客网 时间:2024/05/21 10:39
事务
1. 事务的几个概念
(1)脏读:对于两个事务t1,t2。t1先读取了已经被t2更新但是没有被提交的字段,那么在t2提交之后,数据就会发生改变。
(2)不可重复读:对于两个事务t1,t2。t1读取了字段,之后t2更新了这个字段,那么值就不同了。
(3)幻读:对于两个事务t1,t2。t1读取了字段,之后t2在这个表中加了一些行。T1如果再次读取这个字段就会出现不同。
2. 事务的概念
事务是访问并可能更新数据库中各项数据项的一个程序执行单元。在关系数据库中,事务可以使一条sql语句或者多条sql语句,或者是整个程序。
3. 事务的四个特性:
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
4. Spring 操作事务的流程:
(1)首先我们需要连接数据库
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="com.mysql.jdbc.Driver"></property>
<property name="username" value="root"></property>
<property name="password" value="l19980207"></property>
<property name="url" value="jdbc:mysql://localhost:3306/mydb"></property>
</bean>
(2)其次我们要对SpringJDBC操作数据库的组件进行配置
<bean id="jdbcTemplate" class=" org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="dataSource"></property>
</bean>
(3)然后我们要对Spring操作事务的组件进行配置
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
以上这些都是在applicationDB.xml的上下文文件中进行配置的,如果想要实现业务逻辑的测试,还需要写一个application-xml.xml文件。在这里面进行文件的配置。
<import resource="applicationDB.xml"/>
<bean id="userDao" class="spring.review.tx.xml.dao.UserDaoImpl">
<property name="jdbcTemplate" ref="jdbcTemplate"></property>
</bean>
<bean id="userService" class="spring.review.tx.xml.service.UserService">
<property name="ud" ref="userDao"></property>
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes><!-- 在这里面写入你想要进行事务处理的方法 -->
<tx:method name="buySomeFood" propagation="REQUIRED"/><!-- 匹配的方法 -->
<tx:method name="insert*" propagation="REQUIRED"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution (* spring.review.tx.*.service.*.*(..))" id="test"/><!-- 匹配一个切面,即你想被用事务进行处理的方法 -->
<aop:advisor advice-ref="txAdvice" pointcut-ref="test"/><!-- 此处匹配想要处理的事务,以及匹配对应的切面 -->
</aop:config>
文件的配置可以看出:
1. 首先引入刚才连接数据库的文件。
2. 对我们的mvc开发模式进行配置
3. 事务的配置,具体的解释在注释中可见。
4. 我们想要实现事务,必须要使用aop的代理,所以需要首先匹配一个切面.
5. 实现具体的业务逻辑即可。
- Spring实现事务的处理
- spring事务的处理
- Spring 事务的处理
- Spring的事务不回滚处理
- Spring的JDBC事务实现
- spring 2.0 的事务自动处理
- 4、Spring中关于事务的处理
- spring 事务的两种处理方式
- Spring 事务异常处理
- spring事务的代理方式的实现
- 使用DBUtil框架实现事务的处理
- Spring 实现你自己的事务同步
- Spring具体事务处理器的实现
- Spring事务的五种实现方式
- 实现spring事务的四种方式
- Spring事务管理器JDBC的实现
- Spring事务 基于配置的实现方式
- spring+atomikos 实现的分布式事务
- 排序-直接插入排序
- windows 下redis在后台运行(亲测)
- Oracle误删表的恢复操作
- sdk合并报错:app:transformResourcesWithMergeJavaResForDedug,资源文件/META-INF/MANIFEST.MF重复
- code forces739B 树上差分
- Spring实现事务的处理
- 排序-折半插入排序
- awk
- Android APP Banner ,用这一个就够了
- 排序-希尔排序
- [待完成,不要看]Android 将View保存为图片 View生成长图
- 排序-c++自带排序
- SpringMVC框架原理分析和入门实例
- 分页器