|
@@ -0,0 +1,85 @@
|
|
|
+package com.css.simulation.resource.scene.common.config;
|
|
|
+
|
|
|
+import org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
+import org.springframework.context.annotation.Bean;
|
|
|
+import org.springframework.context.annotation.Configuration;
|
|
|
+import org.springframework.jdbc.datasource.DataSourceTransactionManager;
|
|
|
+import org.springframework.transaction.TransactionDefinition;
|
|
|
+import org.springframework.transaction.TransactionManager;
|
|
|
+import org.springframework.transaction.interceptor.*;
|
|
|
+
|
|
|
+import javax.sql.DataSource;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.HashMap;
|
|
|
+import java.util.Map;
|
|
|
+
|
|
|
+/**
|
|
|
+ * 声明式事务配置
|
|
|
+ */
|
|
|
+@Configuration
|
|
|
+public class TransactionConfig {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ DataSource dataSource;
|
|
|
+
|
|
|
+ @Bean(name = "masterTransactionManager")
|
|
|
+ public DataSourceTransactionManager masterTransactionManager(DataSource dataSource) {
|
|
|
+ return new DataSourceTransactionManager(dataSource);
|
|
|
+ }
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ @Qualifier(value = "masterTransactionManager")
|
|
|
+ private TransactionManager transactionManager;
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public TransactionInterceptor txAdvice() {
|
|
|
+
|
|
|
+ /*只读事务,不做更新操作*/
|
|
|
+ RuleBasedTransactionAttribute readOnlyTx = new RuleBasedTransactionAttribute();
|
|
|
+ readOnlyTx.setReadOnly(true);
|
|
|
+ readOnlyTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_NOT_SUPPORTED);
|
|
|
+
|
|
|
+ /*当前存在事务就使用当前事务,当前不存在事务就创建一个新的事务*/
|
|
|
+ RuleBasedTransactionAttribute requiredTx = new RuleBasedTransactionAttribute();
|
|
|
+ requiredTx.setRollbackRules(Collections.singletonList(new RollbackRuleAttribute(Exception.class)));
|
|
|
+ requiredTx.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
|
|
|
+ requiredTx.setTimeout(5000);
|
|
|
+
|
|
|
+
|
|
|
+ Map<String, TransactionAttribute> txMap = new HashMap<>();
|
|
|
+ txMap.put("save*", requiredTx);
|
|
|
+ txMap.put("insert*", requiredTx);
|
|
|
+ txMap.put("update*", requiredTx);
|
|
|
+ txMap.put("remove*", requiredTx);
|
|
|
+ txMap.put("add*", requiredTx);
|
|
|
+ txMap.put("share*", requiredTx);
|
|
|
+ txMap.put("fx*", requiredTx);
|
|
|
+ txMap.put("del*", requiredTx);
|
|
|
+ /*select,count开头的方法,开启只读,提高数据库访问性能*/
|
|
|
+ txMap.put("select*", readOnlyTx);
|
|
|
+ txMap.put("query*", readOnlyTx);
|
|
|
+ txMap.put("get*", readOnlyTx);
|
|
|
+ txMap.put("list*", readOnlyTx);
|
|
|
+ txMap.put("find*", readOnlyTx);
|
|
|
+ txMap.put("count*", readOnlyTx);
|
|
|
+ txMap.put("*", requiredTx);
|
|
|
+
|
|
|
+ NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource();
|
|
|
+ source.setNameMap(txMap);
|
|
|
+
|
|
|
+ TransactionInterceptor txAdvice = new TransactionInterceptor(transactionManager, source);
|
|
|
+ return txAdvice;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Bean
|
|
|
+ public BeanNameAutoProxyCreator txProxy() {
|
|
|
+ final BeanNameAutoProxyCreator creator = new BeanNameAutoProxyCreator();
|
|
|
+ creator.setInterceptorNames("txAdvice");
|
|
|
+ creator.setBeanNames("*Service");
|
|
|
+ creator.setProxyTargetClass(true);
|
|
|
+ return creator;
|
|
|
+ }
|
|
|
+
|
|
|
+}
|