From 438aa129b55b4864349e247272c5be547a4bac8f Mon Sep 17 00:00:00 2001 From: quyixiao <2621048238@qq.com> Date: Thu, 3 Sep 2020 10:43:47 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4=E4=BF=AE=E6=94=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../interceptor/TxAdviceInterceptor.java | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 src/main/java/com/lz/datasource/interceptor/TxAdviceInterceptor.java diff --git a/src/main/java/com/lz/datasource/interceptor/TxAdviceInterceptor.java b/src/main/java/com/lz/datasource/interceptor/TxAdviceInterceptor.java new file mode 100644 index 00000000..a1cbeba8 --- /dev/null +++ b/src/main/java/com/lz/datasource/interceptor/TxAdviceInterceptor.java @@ -0,0 +1,69 @@ +package com.lz.datasource.interceptor; + +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.beans.factory.annotation.Autowired; +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 java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * Created by guozp on 2017/8/28. + */ + +@Aspect +@Configuration +public class TxAdviceInterceptor { + + private static final int TX_METHOD_TIMEOUT = 30; + + private static final String AOP_POINTCUT_EXPRESSION = "execution (* com.lz..*.*Impl.*(..))"; + + @Autowired + private PlatformTransactionManager transactionManager; + + @Bean + public TransactionInterceptor txAdvice() { + NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource(); + /*当前存在事务就使用当前事务,当前不存在事务就创建一个新的事务*/ + RuleBasedTransactionAttribute requiredTx = new RuleBasedTransactionAttribute(); + List list = new ArrayList<>(); + list.add(new RollbackRuleAttribute(RuntimeException.class)); + list.add(new RollbackRuleAttribute(Exception.class)); + + requiredTx.setRollbackRules(list); + requiredTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); + requiredTx.setTimeout(TX_METHOD_TIMEOUT); + + + Map txMap = new HashMap<>(); + txMap.put("add*", requiredTx); + txMap.put("save*", requiredTx); + txMap.put("insert*", requiredTx); + txMap.put("update*", requiredTx); + txMap.put("delete*", requiredTx); + txMap.put("get*", requiredTx); + txMap.put("query*", requiredTx); + txMap.put("*", requiredTx); + source.setNameMap(txMap); + + TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, source); + return txAdvice; + } + + @Bean + public Advisor txAdviceAdvisor() { + AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut(); + pointcut.setExpression(AOP_POINTCUT_EXPRESSION); + return new DefaultPointcutAdvisor(pointcut, txAdvice()); + } +}