栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring的Aop事务管理

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring的Aop事务管理

文章目录
    • 1. pom文件中添加相关依赖
    • 2. 配置

1. pom文件中添加相关依赖


    org.springframework.boot

    spring-boot-starter-aop


2. 配置
package com.example.tmshop.tm.common;



import org.aspectj.lang.annotation.Aspect;

import org.springframework.aop.Advisor;

import org.springframework.aop.aspectj.AspectJexpressionPointcut;

import org.springframework.aop.support.DefaultPointcutAdvisor;

import org.springframework.context.annotation.Bean;

import org.springframework.context.annotation.Configuration;

import org.springframework.transaction.PlatformTransactionManager;

import org.springframework.transaction.TransactionDefinition;

import org.springframework.transaction.interceptor.*;



import javax.annotation.Resource;

import java.util.Collections;

import java.util.HashMap;

import java.util.Map;



@Aspect

@Configuration

public class TransactionAdviceConfig {



    private final static int METHOD_TIME_OUT = 5000;



    //这里的第一个*代表的是任意返回值

    //第二个代表任意类

    //第三个代表任意方法

    //..代表任意参数

    

    private static final String POINTCUT_expression = "execution(* com.example.tmshop.tm.service.*.*(..))";

    

    @Resource

    private PlatformTransactionManager transactionManager;





    @Bean

    public TransactionInterceptor txAdvice() {

        

        NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();

        

        RulebasedTransactionAttribute readonly = new RulebasedTransactionAttribute();

        readOnly.setReadOnly(true);

        //永远以非事务的方式执行,如果当前存在事务则将事务挂起

        readOnly.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);

        

        RulebasedTransactionAttribute required = new RulebasedTransactionAttribute();

        

        //不论什么异常都会回滚

        //因为setRollbackRules会给rollbackRules赋值,但是

        //rollbackRules是一个集合,泛型是RollbackRuleAttribute

        //RollbackRuleAttribute里面默认创建了一个public static final的异常,RunTimeException

        //也就意味着所有的运行时异常都会被识别

        required.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class)));

        

        required.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);

        

        required.setTimeout(METHOD_TIME_OUT);

        Map attributesMap = new HashMap<>(30);

        //设置增删改上传等使用事务

        attributesMap.put("save*", required);

        attributesMap.put("remove*", required);

        attributesMap.put("update*", required);

        attributesMap.put("batch*", required);

        attributesMap.put("clear*", required);

        attributesMap.put("add*", required);

        attributesMap.put("append*", required);

        attributesMap.put("modify*", required);

        attributesMap.put("edit*", required);

        attributesMap.put("insert*", required);

        attributesMap.put("delete*", required);

        attributesMap.put("do*", required);

        attributesMap.put("create*", required);

        attributesMap.put("import*", required);

        //查询开启只读

        attributesMap.put("select*", readOnly);

        attributesMap.put("get*", readOnly);

        attributesMap.put("valid*", readOnly);

        attributesMap.put("list*", readOnly);

        attributesMap.put("count*", readOnly);

        attributesMap.put("find*", readOnly);

        attributesMap.put("load*", readOnly);

        attributesMap.put("search*", readOnly);

        source.setNameMap(attributesMap);

        return new TransactionInterceptor(transactionManager, source);

    }

    

    @Bean

    public Advisor txAdviceAdvisor() {

        

        AspectJexpressionPointcut pointcut = new AspectJexpressionPointcut();

        

        pointcut.setexpression(POINTCUT_expression);

        

        return new DefaultPointcutAdvisor(pointcut, txAdvice());

    }

}
    

    pointcut.setexpression(POINTCUT_expression);

    

    return new DefaultPointcutAdvisor(pointcut, txAdvice());

}

}

 
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/590937.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号