Spring事务方式

Spring事务的实现方式有三种

一、基于TransactionProxyFactoryBean的方式

这一种几乎不怎么使用,了解即可 。

二、基于AspectJ的XML方式

这种就是基于代理的。在spring核心配置文件配置信息 如下

 <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <!-- 配置基于注解的声明式事务 -->
    <!--<tx:annotation-driven transaction-manager="transactionManager"/>-->
    <!--配置事务传播性-->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <!--service中的方法命名规范-->
            <tx:method name="add*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="remove*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="edit*" propagation="REQUIRED" rollback-for="java.lang.Exception" />
            <tx:method name="search*" propagation="SUPPORTS"/>
            <!--<tx:method name="find*" propagation="SUPPORTS"/>
            <tx:method name="list*" propagation="SUPPORTS"/>-->
            <tx:method name="*" read-only="true"/>
        </tx:attributes>
    </tx:advice>
    <!--组装事务传播和切入点-->
    <aop:config>
        <!--impl包下的所有类所有方法-->
        <aop:pointcut id="pcut" expression="execution(* com.ssm.develop.service.impl.*.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pcut"/>
    </aop:config>

我会分开给大家讲解,首先这一块是配置的事务管理器 ,你用谁的管理器就在class后面加对应的,这个使用的是JDBC的

 <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

这是资料,有兴趣的同学可以收藏下

org.springframework.jdbc.datasource.DataSourceTransactionManager:使用JDBC或者iBatis进行持久化数据时使用
org.springframework.orm.hibernate5.HibernateTransactionManager:使用hibernate5版本进行持久化数据时使用
org.springframework.orm.jpa.JpaTransactionManager:使用JPA进行持久化数据时使用
org.springframework.jdo.JdoTransactionManager:当持久化机制是jdo时使用
org.springframework.transaction.jta.JtaTransactionManager:使用一个JTA实现来管理事务,在一个事务跨越多个资源时必须使用

下面的就是设置传播性和切入点,就是你想在哪里开启事务,这个是service所有的实现类,其中的add,remove,edit,search,find,list 开头的方法设置的传播性不同,propagation后面的关键字是对应的传播性,这里不多讲传播性,简单的提一下,这种就是基于AspectJ的XML方式。

最后一种就是基于注解的方式,也是大家最熟悉 最喜欢用的,最简单的。

<!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
 <!--开启事务注解-->
<tx:annotation-driven transaction-manager="transactionManager" />

没错就是这么简单 ,在需要开启的事务的方法上面加上@Transactional 即可

 /**
     * 自动升级申请提交
     * @param listSid listUpdateData
     * @return Result
     * */
    @Override
    @Transactional
    public Result editTPropKbnApplStatus(List<String> listApplNo,List<String> listUpdateData) {

好了说道这里就结束了,关于事务基础知识大家随便就可以找到,我就不复制粘贴了,但是有点东西还是告诉大家,能用Spring自动事务的就不要手动事务,不然一个程序那么多删除添加修改操作,那将是一个大批冗余的代码,后期维护起来也很难。单体程序的事务难点不多,重点是分布式框架的事务。这个我们以后再讲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值