Spring事务管理浅析

今天学了Spring中的JdbcTemplate应用和Spring中的事务管理机制

由于JdbcTemplate比较简单就不做赘述,在这里在下就记述一下Spring中的事务管理机制和一些鄙见。

事务这个词相信大家对其都并不陌生,有一定的数据库基础的朋友都应该听说过事物具备的四大特性:

  • 原子性 Atomicity
  • 一致性 Consistency
  • 隔离性 Isolation
  • 持久性 Durability

简称(ACID),但在并发场景下,如果不对事物做任何隔离或者保护措施,就可能会造脏读,幻读和不可重复读的异常,扰乱业务逻辑,对此我们的MySQL和Oracl的数据库都分别定制了一系列事务隔离机制来应对这些并发问题,当然安全的代价可能会带来低的效率,在人类还没想出更好的解决思路之前,我们先妥协一下前人给出的方案。

在JavaWeb开发中,我们可以用手动开启提交或者关闭connection来做到对事物的控制,我们学到了强大的IOC容器Spring, Spring也对事物操作做了很好的支持, 我们新建一个maven项目来做示范

注意读这篇文章的时候大家理应对Spring和JavaWeb开发有一定的小了解,如果之前从没接触过Spring的话,应该先去入门一下。

在开始之前我们先要导入一些项目中要用到的包

spring-context    spring-jdbc    spring-tx    mysql-connector-java    spring-test    junit

首先引入事务管理概念,在Spring中大方向上有两种管理事务的模式,其一基于XML配置文件,另一种是基于注解,两者都各有特色,并不能盖棺定论孰优孰劣,但核心思想都是一致的,我们以XML配置文件为例,来对Spring事物先有一个纵览。

在XML文件中包扫描注解,引入properties文件还有配置数据库链接的Bean都不属于这篇博客的范畴,在下就不做赘述

就直接从配置事务管理器和配置事务来入手,比话少说,上代码,

<bean id="transactionManager" 
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
</bean>

 <tx:advice id="txAdvice" transaction-manager="transactionManager">
     <tx:attributes>
        <tx:method name="*" read-only="false" propagation="REQUIRED"/>
        <tx:method name="query*" read-only="true" propagation="SUPPORTS"/>
     </tx:attributes>
 </tx:advice>

前半段是配置Spring的事务管理器,传入参数DataSource就好

后半段是为这个事务管理器声明要管理的方法,并且注入事物的传播行为,隔离级别,超时时间等属性

那么声明好了事物以后我们怎么在项目中应用这些声明呢,高手过招总是无需多言,想必各位也早也想出了用Spring中自带的AOP切入方法,比话少说,上代码,

<aop:config>
    <aop:pointcut id="pt1" expression="execution(* com.itheima.spring.service.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="pt1"/>
</aop:config>

<aop/>标签第一句:切入点配置,定位横切逻辑织入的方法
<aop/>标签第二句:对于事务来说,不需要指定具体的方位信息(方法前/后等)aop:advisor将增强逻辑和切入点关联到一起(织入)

至此,我们就已经基本完成了事务控制的基本配置。

也就是说所有的方法都会开启事务,并且以query开头的方法是只读属性。。。

好了,剩下的基于注解的开发方法师出同源,等待各位自己去开发,我先去睡觉了。

总结一下

Spring事物控制,它的作用是解决了开发者对于管理事物的难以下手问题,提供了统一的操作空间并对事物属性进行高度的自定义。笔者给Spring中面向切面动态代理的术语做了一个私下的自定义------“项目内方法云劫持”

 

晚安

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值