Spring的4种事务管理(1种编程式事务+三种声明事务)

Spring4种事务管理(1种编程式事务+三种声明事务)

·        TransactionTemplate可以实现编程式事务

·        Spring使用AOP来实现声明式事务

一、Spring事务的介绍

二、编程式事务xml的配置

配置spring-dao.xml中

1.       OrderServiceImpl中使用TransactionTemplate

2.       TransactionTemplate依赖DataSourceTransactionManager

3.       DataSourceTransactionManager依赖DataSource数据源构造

<bean id="transactionTemplate"class="org.springframework.transaction.support.TransactionTemplate">

    <propertyname="transactionManager"ref="transactionManager"></property>

</bean>

 

<bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

<propertyname="dataSource" ref="dataSource"/>

 

在baseManager.java中

public class BaseManager {

    private static final Loggerlog = Logger.getLogger(BaseManager.class);

 

//    privatePlatformTransactionManager transactionManager;

    private TransactionTemplatetransactionTemplate;

 

//    public TransactionTemplategetTransactionManager() {

//        return new TransactionTemplate(transactionManager);

//    }

//

//    public voidsetTransactionManager(PlatformTransactionManager transactionManager) {

//        this.transactionManager= transactionManager;

//    }

 

    public TransactionTemplategetTransactionManager() {

        returntransactionTemplate;

    }

 

    public voidsetTransactionTemplate(TransactionTemplate transactionTemplate) {

        this.transactionTemplate= transactionTemplate;

    }

}

在orderManagerImpl中

public boolean updateOrderById(final Order order) throws Exception {

        finalTransactionTemplate transactionTemplate = this.getTransactionManager();

        Boolean result =(Boolean)transactionTemplate.execute(new TransactionCallback() {

            @Override

            public ObjectdoInTransaction(TransactionStatus status) {

                try {

                    业务……

                    return true;

                }catch (Exceptione){

                   log.error("修改失败,id"+order.getId());

                    status.setRollbackOnly();//回滚

                    return false;

 

                }

            }

        });

        return result;

}

 

三、基于AOP方式的声明式事务管理

prop的具体配置

使用AOP声明式事务是时service层必须注入代理类

四、基于AspectJ的声明式事务

基于AspectJxml配置

传播行为的配置

五、基于注解方式的声明式事务管理

   在配置spring-dao.xml中

<tx:annotation-driventransaction-manager="transactionManager"/>

    <beanid="transactionTemplate"class="org.springframework.transaction.support.TransactionTemplate">

        <propertyname="transactionManager"ref="transactionManager"></property>

   </bean>

在需要使用事务的类上添加注解即可 @Transactional

@Transactional
    public boolean updateOrderById(final Order order) throws Exception { …… }

 

注解方式的传播行为配置

学习总结:

 Spring将事务管理分为了两类:

     一、编程式事务管理

          需要手动编写代码进行事务的管理(一般不用)

      二、声明式事务管理:

 1、基于TransactionProxyFactoryBean的方式(很少使用) 

需要为每个事务管理的类配置一个TransactionProxyFactoryBean进行管理。使用时还需要在类中注入该代理类。

2、基于AspectJ的方式(常使用)

配置好之后,按照方法的名字进行管理,无需再类中添加任何东西。

 3、基于注解的方式(经常使用)

配置简单,在业务层类上添加注解@Transactional

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring框架提供了两事务管理编程事务管理声明式事务管理。 1. 编程事务管理编程事务管理是通过编写代码来管理事务的提交和回滚。在这下,开发人员需要手动编写事务的开始、提交和回滚的代码。Spring提供了`TransactionTemplate`和`TransactionDefinition`等类来简化编程事务管理的操作。通过使用`TransactionTemplate`,可以在需要进行事务处理的代码块中对事务进行管理。 2. 声明式事务管理: 声明式事务管理是通过配置的方来管理事务的提交和回滚,而不需要手动编写事务管理的代码。在这下,开发人员只需要在需要进行事务处理的方法上使用注解或者XML配置文件来声明事务的属性,Spring框架就会根据配置自动实现事务管理。常见的注解方是使用`@Transactional`注解。 两事务管理各有优劣,编程事务管理灵活性较高,适用于复杂的事务场景,但需要开发人员手动编写大量的事务管理代码;声明式事务管理简化了开发工作,通过配置即可实现事务管理,但对于一些复杂的业务场景可能不够灵活。 总的来说,对于大部分应用场景而言,推荐使用声明式事务管理,可以减少重复代码的编写,提高开发效率。而在一些特殊的业务场景下,如需要动态控制事务的提交和回滚,或者需要手动处理一些特殊情况,可以考虑使用编程事务管理

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值