瀏覽代碼

Merge remote-tracking branch 'origin/master'

zhaoyan 3 年之前
父節點
當前提交
60a030bfcb

+ 2 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/Application.java

@@ -4,11 +4,13 @@ import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 import org.springframework.security.oauth2.config.annotation.web.configuration.EnableResourceServer;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
 
 
 @SpringBootApplication
 @EnableFeignClients
 @EnableResourceServer
+@EnableTransactionManagement
 public class Application {
 
     public static void main(String[] args) {

+ 3 - 3
simulation-resource-server/src/main/java/com/css/simulation/resource/common/config/OAuth2Config.java

@@ -32,7 +32,6 @@ public class OAuth2Config extends ResourceServerConfigurerAdapter {
         DefaultAccessTokenConverter defaultAccessTokenConverter = new DefaultAccessTokenConverter();
         defaultAccessTokenConverter.setUserTokenConverter(myUserAuthenticationConverter);
         services.setAccessTokenConverter(defaultAccessTokenConverter);
-
         resources.resourceId(oauthParameter.getResourceId())      // 资源 id
                 .tokenServices(services)    // 使用远程服务验证令牌的服务
                 .stateless(true);   // 无状态模式,即无需用户登录,无 session
@@ -46,8 +45,9 @@ public class OAuth2Config extends ResourceServerConfigurerAdapter {
         http.csrf().disable()   // 禁用 csrf
                 .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)// 无状态验证
                 .and()
-                .authorizeRequests().anyRequest()
-                .access("#oauth2.hasScope('all')") // 拦截所有请求判断 scope
+                .authorizeRequests()
+                .antMatchers("/druid/**").permitAll()
+                .anyRequest().access("#oauth2.hasScope('all')") // 拦截所有请求判断 scope
         ;
     }
 }

+ 85 - 0
simulation-resource-server/src/main/java/com/css/simulation/resource/common/config/TransactionConfig.java

@@ -0,0 +1,85 @@
+package com.css.simulation.resource.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;
+    }
+
+}