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. 实现具体的业务逻辑即可。

 

 

 

原创粉丝点击