Quellcode durchsuchen

spring cloud 的版本升级到了 2020.0.4版本,spring-boot-starter-parent升级到了2.4.6版本。

yangzhijie vor 4 Jahren
Ursprung
Commit
800ddb03ad

+ 38 - 57
pom.xml

@@ -5,45 +5,40 @@
 	<groupId>com.leanwo.gateway</groupId>
 	<artifactId>GatewayServer</artifactId>
 	<version>0.0.1</version>
+	
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+		<java.version>1.8</java.version>
+		<spring-cloud.version>2020.0.4</spring-cloud.version>
+		<java.jwt.version>3.7.0</java.jwt.version>
+	</properties>
+	
 	<!--指定父级依赖 -->
 	<parent>
 		<groupId>org.springframework.boot</groupId>
 		<artifactId>spring-boot-starter-parent</artifactId>
-		<version>2.2.4.RELEASE</version>
+		<version>2.4.6</version>
 		<relativePath /> <!-- lookup parent from repository -->
 	</parent>
 
-	<properties>
-		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
-		<h2.version>2.5.0-b60</h2.version>
-		<java.version>1.8</java.version>
-		<spring-cloud.version>Hoxton.RELEASE</spring-cloud.version>
-		<java.jwt.version>3.7.0</java.jwt.version>
-	</properties>
+	<dependencyManagement>
+		<dependencies>
+			<dependency>
+				<groupId>org.springframework.cloud</groupId>
+				<artifactId>spring-cloud-dependencies</artifactId>
+				<version>${spring-cloud.version}</version>
+				<type>pom</type>
+				<scope>import</scope>
+			</dependency>
+		</dependencies>
+	</dependencyManagement>
 
 	<dependencies>
-		<!--jwt 权限验证 -->
-		<dependency>
-			<groupId>com.auth0</groupId>
-			<artifactId>java-jwt</artifactId>
-			<version>${java.jwt.version}</version>
-		</dependency>
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter</artifactId>
-			<exclusions>
-				<exclusion>
-					<groupId>org.springframework.boot</groupId>
-					<artifactId>spring-boot-starter-logging</artifactId>
-				</exclusion>
-			</exclusions>
-		</dependency>
-
 		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-log4j2</artifactId>
-		</dependency>
-
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-bootstrap</artifactId>
+        </dependency>
+        
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
@@ -53,30 +48,13 @@
 			<groupId>org.springframework.cloud</groupId>
 			<artifactId>spring-cloud-starter-gateway</artifactId>
 		</dependency>
-
-		<!--sleuth日志跟踪-->
-		<dependency>
-		    <groupId>org.springframework.cloud</groupId>
-		    <artifactId>spring-cloud-starter-sleuth</artifactId>
-		</dependency>
 		
 		<!-- spring cloud config 客户端包 -->
 		<dependency>
 		    <groupId>org.springframework.cloud</groupId>
 		    <artifactId>spring-cloud-starter-config</artifactId>
 		</dependency>
-		
-		<dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-actuator</artifactId>
-        </dependency>
         
-		<dependency>
-			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-test</artifactId>
-			<scope>test</scope>
-		</dependency>
-		
 		<!-- Eureka服务发现注册 -->
 		<dependency>
 			<groupId>org.springframework.cloud</groupId>
@@ -89,20 +67,23 @@
 			<artifactId>spring-cloud-starter-openfeign</artifactId>
 		</dependency>
 
+        
+		<!--jwt 权限验证 -->
+		<dependency>
+			<groupId>com.auth0</groupId>
+			<artifactId>java-jwt</artifactId>
+			<version>${java.jwt.version}</version>
+		</dependency>
+		
+		<dependency>
+			<groupId>org.springframework.boot</groupId>
+			<artifactId>spring-boot-starter-test</artifactId>
+			<scope>test</scope>
+		</dependency>
+		
 	</dependencies>
 
 
-	<dependencyManagement>
-		<dependencies>
-			<dependency>
-				<groupId>org.springframework.cloud</groupId>
-				<artifactId>spring-cloud-dependencies</artifactId>
-				<version>${spring-cloud.version}</version>
-				<type>pom</type>
-				<scope>import</scope>
-			</dependency>
-		</dependencies>
-	</dependencyManagement>
 
 
 	<build>

+ 70 - 77
src/main/java/com/leanwo/gateway/GlobalAccountFilter.java

@@ -1,77 +1,70 @@
-package com.leanwo.gateway;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.util.List;
-
-import org.apache.commons.lang.StringUtils;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.cloud.gateway.filter.GatewayFilterChain;
-import org.springframework.cloud.gateway.filter.GlobalFilter;
-import org.springframework.cloud.gateway.filter.LoadBalancerClientFilter;
-import org.springframework.core.Ordered;
-import org.springframework.http.server.reactive.ServerHttpRequest;
-import org.springframework.stereotype.Component;
-import org.springframework.web.server.ServerWebExchange;
-
-import com.leanwo.gateway.dto.AccountManagementDto;
-import com.leanwo.gateway.service.AccountManagementService;
-import com.leanwo.gateway.service.AccountManagementServiceImpl;
-import com.leanwo.gateway.util.SpringUtil;
-
-import reactor.core.publisher.Mono;
-
-/**
- * 全局过滤器
- * @author GuoZhiBo 20200617
- *
- */
-@Component//注入Spring容器
-public class GlobalAccountFilter implements GlobalFilter, Ordered{
-	
-	private static Logger logger = LoggerFactory.getLogger(GlobalAccountFilter.class);
-
-	@Autowired
-	private AccountManagementService accountManagementService;
-	
-	
-	/**
-     * 当前过滤器的执行顺序:
-     * 数字越小,越早执行
-     * @return
-     */
-	@Override
-	public int getOrder() {
-		return LoadBalancerClientFilter.LOAD_BALANCER_CLIENT_FILTER_ORDER - 1;
-	}
-
-	@Override
-	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
-		/**
-         * 目标:拦截所有请求,如果请求参数中,
-         *  包含token。放行,
-         *  如果没有,给用户提示未授权401,未授权
-         */
-        //获取请求参数
-        ServerHttpRequest request = exchange.getRequest();
-        //原始uri
-        URI originUri = request.getURI();
-        
-        String url = originUri.toString();
-        String path = request.getPath().toString();
-        int endIndex = url.length() - path.length();
-        //获取域名
-        String domainName = url.substring(0, endIndex);
-        logger.debug("未截取前域名:" + domainName);
-        domainName = domainName.replace("http://", "").replace("https://", "");
-        logger.debug("域名:" + domainName);
-        Long accountId = accountManagementService.getAccountIdByDomainName(domainName);
-    	
-    	request.mutate().header("account", accountId.toString()).build();
-    	//代表放行请求
-        return chain.filter(exchange);
-	}
-	
-}
+package com.leanwo.gateway;
+
+import java.net.URI;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.Ordered;
+import org.springframework.http.server.reactive.ServerHttpRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+
+import com.leanwo.gateway.service.AccountManagementService;
+
+import reactor.core.publisher.Mono;
+
+/**
+ * 全局过滤器
+ * @author GuoZhiBo 20200617
+ *
+ */
+@Component//注入Spring容器
+public class GlobalAccountFilter implements GlobalFilter, Ordered{
+	
+	private static Logger logger = LoggerFactory.getLogger(GlobalAccountFilter.class);
+
+	@Autowired
+	private AccountManagementService accountManagementService;
+	
+	
+	/**
+     * 当前过滤器的执行顺序:
+     * 数字越小,越早执行
+     * @return
+     */
+	@Override
+	public int getOrder() {
+		return 1;
+	}
+
+	@Override
+	public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+		/**
+         * 目标:拦截所有请求,如果请求参数中,
+         *  包含token。放行,
+         *  如果没有,给用户提示未授权401,未授权
+         */
+        //获取请求参数
+        ServerHttpRequest request = exchange.getRequest();
+        //原始uri
+        URI originUri = request.getURI();
+        
+        String url = originUri.toString();
+        String path = request.getPath().toString();
+        int endIndex = url.length() - path.length();
+        //获取域名
+        String domainName = url.substring(0, endIndex);
+        logger.debug("未截取前域名:" + domainName);
+        domainName = domainName.replace("http://", "").replace("https://", "");
+        logger.debug("域名:" + domainName);
+        Long accountId = accountManagementService.getAccountIdByDomainName(domainName);
+    	
+    	request.mutate().header("account", accountId.toString()).build();
+    	//代表放行请求
+        return chain.filter(exchange);
+	}
+	
+}

+ 1 - 5
src/main/java/com/leanwo/gateway/exception/KeepErrMsgConfiguration.java

@@ -1,14 +1,10 @@
 package com.leanwo.gateway.exception;
 
-import java.io.Reader;
-
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.context.annotation.Bean;
 import org.springframework.context.annotation.Configuration;
 
-import com.netflix.hystrix.exception.HystrixBadRequestException;
-
 import feign.Response;
 import feign.codec.ErrorDecoder;
 
@@ -34,7 +30,7 @@ public class KeepErrMsgConfiguration {
         @Override
         public Exception decode(String methodKey, Response response) {
             String errorMessage = response.body().toString();
-            return new HystrixBadRequestException(errorMessage);
+            return new Exception(errorMessage);
         }
     }
 }

+ 116 - 116
src/main/java/com/leanwo/gateway/util/SpringUtil.java

@@ -1,117 +1,117 @@
-package com.leanwo.gateway.util;
-
-import java.lang.annotation.Annotation;
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.Map;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.springframework.beans.BeansException;
-import org.springframework.context.ApplicationContext;
-import org.springframework.context.ApplicationContextAware;
-
-import com.leanwo.gateway.exception.BeanNotInjectException;
-
-
-public class SpringUtil implements ApplicationContextAware {
-	private static Log logger = LogFactory.getLog(SpringUtil.class);
-	private static ApplicationContext applicationContext;
-
-	@Override
-	public void setApplicationContext(ApplicationContext arg0) throws BeansException {
-		applicationContext = arg0;
-		String[] names = beanNames();
-		logger.info("IOC容器共管理:" + names.length + "个对象。");
-		logger.info("Spring容器初始化成功。");
-	}
-
-	public static ApplicationContext getApplicationContext() {
-		checkApplicationContext();
-		return applicationContext;
-	}
-
-	/**
-	 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
-	 */
-	@SuppressWarnings("unchecked")
-	public static <T> T getBean(String name) {
-		checkApplicationContext();
-		return (T) applicationContext.getBean(name);
-	}
-
-	/**
-	 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
-	 */
-	public static <T> T getBean(Class<T> clazz) {
-		checkApplicationContext();
-		return (T) applicationContext.getBeansOfType(clazz);
-	}
-
-	/**
-	 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
-	 */
-	public static Object getSingleBean(Class clazz) {
-		checkApplicationContext();
-		Map<String, Object> map = applicationContext.getBeansOfType(clazz);
-		if (map == null || map.size() == 0) {
-			throw new BeanNotInjectException(clazz.getName() + "未注入。");
-		} else if (map.size() > 1) {
-			throw new IllegalStateException(clazz.getName() + "存在" + map.size() + "个对象。");
-		} else {
-			Iterator iterator = map.entrySet().iterator();
-			Map.Entry entry = (Map.Entry) iterator.next();
-			return entry.getValue();
-		}
-	}
-
-	/**
-	 * 从当前IOC获取标识了annotation注释的对象
-	 * 
-	 * @param annotation
-	 * @return
-	 */
-	public static Collection<Object> beansByAnnotation(Class<? extends Annotation> annotation) {
-		checkApplicationContext();
-		return applicationContext.getBeansWithAnnotation(annotation).values();
-	}
-
-	/**
-	 * 获取当前IOC所有Bean的名称
-	 * 
-	 * @return
-	 */
-	public static String[] beanNames() {
-		checkApplicationContext();
-		return applicationContext.getBeanDefinitionNames();
-
-	}
-
-	/**
-	 * 获取当前IOC中beanName对应的类
-	 * 
-	 * @param beanName
-	 * @return
-	 */
-	public static Class getType(String beanName) {
-		checkApplicationContext();
-		return applicationContext.getType(beanName);
-	}
-
-	/**
-	 * 从当前IOC获取标识了annotation注释的对象
-	 * 
-	 * @param id
-	 * @return
-	 */
-	public static Object getObject(String id) {
-		checkApplicationContext();
-		return applicationContext.getBean(id);
-	}
-
-	private static void checkApplicationContext() {
-		if (applicationContext == null) {
-			throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
-		}
-	}
+package com.leanwo.gateway.util;
+
+import java.lang.annotation.Annotation;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.beans.BeansException;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.ApplicationContextAware;
+
+import com.leanwo.gateway.exception.BeanNotInjectException;
+
+
+public class SpringUtil implements ApplicationContextAware {
+	private static Log logger = LogFactory.getLog(SpringUtil.class);
+	private static ApplicationContext applicationContext;
+
+	@Override
+	public void setApplicationContext(ApplicationContext arg0) throws BeansException {
+		applicationContext = arg0;
+		String[] names = beanNames();
+		logger.info("IOC容器共管理:" + names.length + "个对象。");
+		logger.info("Spring容器初始化成功。");
+	}
+
+	public static ApplicationContext getApplicationContext() {
+		checkApplicationContext();
+		return applicationContext;
+	}
+
+	/**
+	 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
+	 */
+	@SuppressWarnings("unchecked")
+	public static <T> T getBean(String name) {
+		checkApplicationContext();
+		return (T) applicationContext.getBean(name);
+	}
+
+	/**
+	 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
+	 */
+	public static <T> T getBean(Class<T> clazz) {
+		checkApplicationContext();
+		return (T) applicationContext.getBeansOfType(clazz);
+	}
+
+	/**
+	 * 从静态变量ApplicationContext中取得Bean, 自动转型为所赋值对象的类型.
+	 */
+	public static Object getSingleBean(Class clazz) {
+		checkApplicationContext();
+		Map<String, Object> map = applicationContext.getBeansOfType(clazz);
+		if (map == null || map.size() == 0) {
+			throw new BeanNotInjectException(clazz.getName() + "未注入。");
+		} else if (map.size() > 1) {
+			throw new IllegalStateException(clazz.getName() + "存在" + map.size() + "个对象。");
+		} else {
+			Iterator iterator = map.entrySet().iterator();
+			Map.Entry entry = (Map.Entry) iterator.next();
+			return entry.getValue();
+		}
+	}
+
+	/**
+	 * 从当前IOC获取标识了annotation注释的对象
+	 * 
+	 * @param annotation
+	 * @return
+	 */
+	public static Collection<Object> beansByAnnotation(Class<? extends Annotation> annotation) {
+		checkApplicationContext();
+		return applicationContext.getBeansWithAnnotation(annotation).values();
+	}
+
+	/**
+	 * 获取当前IOC所有Bean的名称
+	 * 
+	 * @return
+	 */
+	public static String[] beanNames() {
+		checkApplicationContext();
+		return applicationContext.getBeanDefinitionNames();
+
+	}
+
+	/**
+	 * 获取当前IOC中beanName对应的类
+	 * 
+	 * @param beanName
+	 * @return
+	 */
+	public static Class getType(String beanName) {
+		checkApplicationContext();
+		return applicationContext.getType(beanName);
+	}
+
+	/**
+	 * 从当前IOC获取标识了annotation注释的对象
+	 * 
+	 * @param id
+	 * @return
+	 */
+	public static Object getObject(String id) {
+		checkApplicationContext();
+		return applicationContext.getBean(id);
+	}
+
+	private static void checkApplicationContext() {
+		if (applicationContext == null) {
+			throw new IllegalStateException("applicaitonContext未注入,请在applicationContext.xml中定义SpringContextHolder");
+		}
+	}
 }

+ 0 - 13
src/main/resources/bootstrap.yml

@@ -29,16 +29,3 @@ eureka:
     registryFetchIntervalSeconds: 2
     serviceUrl:
       defaultZone: http://localhost:88/eureka/
- 
-ribbon:
-  #请求处理的超时时间
-  ReadTimeout: 12000000
-  #请求连接的超时时间
-  ConnectTimeout: 3000000
-
-
-management:
-  endpoints:
-    web:
-      exposure:
-        include: refresh

+ 0 - 47
src/main/resources/log4j2.xml

@@ -1,47 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<configuration status="WARN" monitorInterval="30">
-
-    <Properties>
-        <Property name="LOG_HOME">logs/</Property>
-    </Properties>
-    
-	<!-- 先定义所有的appender -->
-	<appenders>
-		<Console name="Console" target="SYSTEM_OUT">
-            <!-- 控制台只输出level及以上级别的信息(onMatch),其他的直接拒绝(onMismatch) -->
-            <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
-            <!-- 这个都知道是输出日志的格式 -->
-            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n" />
-
-        </Console>
-        
-		<!-- 这个会打印出所有的信息,每次大小超过size,则这size大小的日志会自动存入按年份-月份建立的文件夹下面并进行压缩,作为存档 -->
-		<RollingFile name="RollingFile"
-			fileName="${LOG_HOME}/server-management.log"
-			filePattern="${LOG_HOME}/$${date:yyyy-MM}/app-%d{MM-dd-yyyy}-%i.log.gz">
-			<ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY" />
-            <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss.SSS} [%t] %-5level [%logger{50}:%L] [%X{X-B3-TraceId},%X{X-B3-SpanId}] - %msg%n" />
-
-			<SizeBasedTriggeringPolicy size="2MB" />
-		</RollingFile>
-	</appenders>
-	<!-- 然后定义logger,只有定义了logger并引入的appender,appender才会生效 -->
-	<loggers>
-		<!-- 建立一个默认的root的logger -->
-		<root level="debug">
-			<appender-ref ref="RollingFile" />
-			<appender-ref ref="Console" />
-		</root>
-		
-        <!-- 第三方日志系统 -->
-        <logger name="org.springframework" level="error"/>
-        <logger name="org.hibernate" level="error"/>
-        <logger name="com.mchange.v2" level="error"/>
-        <logger name="com.alibaba.druid" level="error"/>
-        <logger name="org.eclipse.jetty" level="error"/>
-        <logger name="net.sf.ehcache" level="error"/>
-        <logger name="org.apache.http" level="error"/>
-        <logger name="com.netflix.discovery" level="error"/>
-        <logger name="com.netflix.config" level="error"/>
-	</loggers>
-</configuration>

+ 50 - 0
src/main/resources/logback.xml

@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<configuration>
+    <!-- 格式化输出:%date表示日期,%thread表示线程名,%-5level:级别从左显示5个字符宽度 %msg:日志消息,%n是换行符-->
+    <property name="LOG_PATTERN" value="%date{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n" />
+    <!-- 定义日志存储的路径,不要配置相对路径 -->
+    <property name="FILE_PATH" value="./logs/GatewayServer.%d{yyyy-MM-dd}.%i.log" />
+ 
+    <!-- 控制台输出日志 -->
+    <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
+        <encoder>
+            <!-- 按照上面配置的LOG_PATTERN来打印日志 -->
+            <pattern>${LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+ 
+    <!--每天生成一个日志文件,保存15天的日志文件。rollingFile是用来切分文件的 -->
+    <appender name="FILE"
+              class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <fileNamePattern>${FILE_PATH}</fileNamePattern>
+            <!-- keep 15 days' worth of history -->
+            <maxHistory>1</maxHistory>
+            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
+                <!-- 日志文件的最大大小 -->
+                <maxFileSize>10MB</maxFileSize>
+            </timeBasedFileNamingAndTriggeringPolicy>
+        </rollingPolicy>
+ 
+        <encoder>
+            <pattern>${LOG_PATTERN}</pattern>
+        </encoder>
+    </appender>
+    
+    <!-- project default level -->
+    <logger name="src" level="DEBUG" />
+    <logger name="org.springframework" level="ERROR"/>
+    <logger name="org.hibernate" level="ERROR"/>
+    <logger name="com.mchange.v2" level="ERROR"/>
+    <logger name="com.alibaba.druid" level="ERROR"/>
+    <logger name="org.eclipse.jetty" level="ERROR"/>
+    <logger name="net.sf.ehcache" level="ERROR"/>
+    <logger name="org.apache" level="ERROR"/>
+    <logger name="com.netflix" level="ERROR"/>
+ 
+    <!-- 日志输出级别 常用的日志级别按照从高到低依次为:ERROR、WARN、INFO、DEBUG。 -->
+    <root level="DEBUG">
+        <appender-ref ref="CONSOLE" />
+        <appender-ref ref="FILE" />
+    </root>
+</configuration>