From 258ce7dcfed9efc3ea412012618a53bc42063281 Mon Sep 17 00:00:00 2001
From: lynnlovemin <331509758@qq.com>
Date: Fri, 26 Jul 2019 10:52:19 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8Dredis=E5=88=86=E5=B8=83?=
=?UTF-8?q?=E5=BC=8F=E9=94=81=E7=9A=84=E9=97=AE=E9=A2=98?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../springcloud/config/pom.xml" | 6 +-
.../java/com/lynn/config/Application.java" | 6 +-
.../src/main/resources/application.yml" | 18 ++--
.../springcloud/eurekaclient/pom.xml" | 14 ++-
.../src/main/java/com/lynn/Application.java" | 6 +-
.../src/main/resources/bootstrap.yml" | 22 +++--
.../springcloud/eurekaserver/pom.xml" | 10 +-
.../src/main/java/com/lynn/Application.java" | 4 +-
.../src/main/resources/application.yml" | 21 +++--
.../springcloud/feign/pom.xml" | 12 ++-
.../java/com/lynn/feign/ApiController.java" | 2 +-
.../main/java/com/lynn/feign/ApiService.java" | 2 +-
.../java/com/lynn/feign/ApiServiceError.java" | 2 +-
.../java/com/lynn/feign/Application.java" | 24 +++--
.../feign/src/main/resources/application.yml" | 1 +
.../springcloud/gateway/pom.xml" | 12 ++-
.../lynn/gateway/ApiFallbackProvider.java" | 64 -------------
.../java/com/lynn/gateway/ApiFilter.java" | 42 ---------
.../com/lynn/gateway/ApiGlobalFilter.java" | 36 ++++++++
.../java/com/lynn/gateway/Application.java" | 9 +-
.../gateway/ErrorHandlerConfiguration.java" | 65 +++++++++++++
.../lynn/gateway/JsonExceptionHandler.java" | 91 +++++++++++++++++++
.../src/main/resources/application.yml" | 24 +++--
.../springcloud/pom.xml" | 10 +-
.../springcloud/eurekaclient/pom.xml" | 2 +-
.../com/lynn/demo/config/MyBatisConfig2.java" | 2 +-
.../lynn/demo/lock/RedissonConnector.java" | 14 ++-
.../com/lynn/demo/service/UserService.java" | 4 +
.../demo/src/main/resources/application.yml" | 2 +-
29 files changed, 344 insertions(+), 183 deletions(-)
delete mode 100755 "\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiFallbackProvider.java"
delete mode 100755 "\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiFilter.java"
create mode 100644 "\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiGlobalFilter.java"
create mode 100644 "\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ErrorHandlerConfiguration.java"
create mode 100644 "\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/JsonExceptionHandler.java"
diff --git "a/\347\254\25410\350\257\276/springcloud/config/pom.xml" "b/\347\254\25410\350\257\276/springcloud/config/pom.xml"
index 446abc7..5e18d7e 100644
--- "a/\347\254\25410\350\257\276/springcloud/config/pom.xml"
+++ "b/\347\254\25410\350\257\276/springcloud/config/pom.xml"
@@ -14,15 +14,15 @@
org.springframework.cloud
- spring-cloud-starter-eureka
+ spring-cloud-config-server
org.springframework.cloud
- spring-cloud-config-server
+ spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
- spring-cloud-starter-bus-amqp
+ spring-cloud-starter-netflix-hystrix
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/config/src/main/java/com/lynn/config/Application.java" "b/\347\254\25410\350\257\276/springcloud/config/src/main/java/com/lynn/config/Application.java"
index 2a06c01..93b6c00 100644
--- "a/\347\254\25410\350\257\276/springcloud/config/src/main/java/com/lynn/config/Application.java"
+++ "b/\347\254\25410\350\257\276/springcloud/config/src/main/java/com/lynn/config/Application.java"
@@ -1,12 +1,10 @@
package com.lynn.config;
import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
-@SpringBootApplication
-@EnableEurekaClient
+@SpringCloudApplication
@EnableConfigServer
public class Application {
diff --git "a/\347\254\25410\350\257\276/springcloud/config/src/main/resources/application.yml" "b/\347\254\25410\350\257\276/springcloud/config/src/main/resources/application.yml"
index 8c44201..2d537ab 100644
--- "a/\347\254\25410\350\257\276/springcloud/config/src/main/resources/application.yml"
+++ "b/\347\254\25410\350\257\276/springcloud/config/src/main/resources/application.yml"
@@ -6,29 +6,27 @@ spring:
profiles:
active: dev
cloud:
- bus:
- trace:
- enable: true
config:
server:
git:
uri: https://github.com/lynnlovemin/SpringCloudLesson.git #配置git仓库地址
searchPaths: 第09课/config #配置仓库路径
username: lynnlovemin #访问git仓库的用户名
- password: ****** #访问git仓库的用户密码
+ password: 1qaz,2wsx,3edc. #访问git仓库的用户密码
label: master #配置仓库的分支
rabbitmq:
- host: localhost
+ host: 127.0.0.1
port: 5672
username: guest
password: guest
+ virtualHost: /
+ publisherConfirms: true
eureka:
- instance:
- hostname: ${spring.cloud.client.ipAddress}
- instanceId: ${spring.cloud.client.ipAddress}:${server.port}
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
management:
- security:
- enabled: false
+ endpoints:
+ web:
+ exposure:
+ include: refresh,health,info,bus-refresh,bus-trace
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/eurekaclient/pom.xml" "b/\347\254\25410\350\257\276/springcloud/eurekaclient/pom.xml"
index a66a5f5..73c40cd 100755
--- "a/\347\254\25410\350\257\276/springcloud/eurekaclient/pom.xml"
+++ "b/\347\254\25410\350\257\276/springcloud/eurekaclient/pom.xml"
@@ -14,12 +14,24 @@
org.springframework.cloud
- spring-cloud-starter-eureka
+ spring-cloud-starter-netflix-eureka-client
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
+
+ org.springframework.boot
+ spring-boot-starter-web
org.springframework.cloud
spring-cloud-starter-config
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
org.springframework.cloud
spring-cloud-starter-bus-amqp
diff --git "a/\347\254\25410\350\257\276/springcloud/eurekaclient/src/main/java/com/lynn/Application.java" "b/\347\254\25410\350\257\276/springcloud/eurekaclient/src/main/java/com/lynn/Application.java"
index f5864a7..75c3f1f 100755
--- "a/\347\254\25410\350\257\276/springcloud/eurekaclient/src/main/java/com/lynn/Application.java"
+++ "b/\347\254\25410\350\257\276/springcloud/eurekaclient/src/main/java/com/lynn/Application.java"
@@ -1,11 +1,9 @@
package com.lynn;
import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
+import org.springframework.cloud.client.SpringCloudApplication;
-@SpringBootApplication
-@EnableEurekaClient
+@SpringCloudApplication
public class Application {
public static void main(String[] args) {
diff --git "a/\347\254\25410\350\257\276/springcloud/eurekaclient/src/main/resources/bootstrap.yml" "b/\347\254\25410\350\257\276/springcloud/eurekaclient/src/main/resources/bootstrap.yml"
index f37d832..9ac3172 100755
--- "a/\347\254\25410\350\257\276/springcloud/eurekaclient/src/main/resources/bootstrap.yml"
+++ "b/\347\254\25410\350\257\276/springcloud/eurekaclient/src/main/resources/bootstrap.yml"
@@ -1,13 +1,19 @@
spring:
- application:
- name: eurekaclient
- profiles:
- active: dev
cloud:
config:
- profile: dev #指定配置环境,配置文件如果是多环境则取名类似:config-dev.yml
- name: eurekaclient #指定配置文件名字(多个配置文件以英文逗号隔开)
- label: master #git仓库分支名
+ name: eurekaclient
+ label: master
discovery:
enabled: true
- serviceId: config #连接的配置中心名字(applicaiton.name)
\ No newline at end of file
+ serviceId: config
+ rabbitmq:
+ host: 127.0.0.1
+ port: 5672
+ username: guest
+ password: guest
+ virtualHost: /
+ publisherConfirms: true
+eureka:
+ client:
+ service-url:
+ defaultZone: http://localhost:8761/eureka/
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/eurekaserver/pom.xml" "b/\347\254\25410\350\257\276/springcloud/eurekaserver/pom.xml"
index e912a81..31c7db5 100755
--- "a/\347\254\25410\350\257\276/springcloud/eurekaserver/pom.xml"
+++ "b/\347\254\25410\350\257\276/springcloud/eurekaserver/pom.xml"
@@ -14,7 +14,15 @@
org.springframework.cloud
- spring-cloud-starter-eureka-server
+ spring-cloud-starter-netflix-eureka-server
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/eurekaserver/src/main/java/com/lynn/Application.java" "b/\347\254\25410\350\257\276/springcloud/eurekaserver/src/main/java/com/lynn/Application.java"
index f117439..13be653 100755
--- "a/\347\254\25410\350\257\276/springcloud/eurekaserver/src/main/java/com/lynn/Application.java"
+++ "b/\347\254\25410\350\257\276/springcloud/eurekaserver/src/main/java/com/lynn/Application.java"
@@ -1,10 +1,10 @@
package com.lynn;
import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
-@SpringBootApplication
+@SpringCloudApplication
@EnableEurekaServer
public class Application {
diff --git "a/\347\254\25410\350\257\276/springcloud/eurekaserver/src/main/resources/application.yml" "b/\347\254\25410\350\257\276/springcloud/eurekaserver/src/main/resources/application.yml"
index 24c4ede..34535fc 100755
--- "a/\347\254\25410\350\257\276/springcloud/eurekaserver/src/main/resources/application.yml"
+++ "b/\347\254\25410\350\257\276/springcloud/eurekaserver/src/main/resources/application.yml"
@@ -1,17 +1,26 @@
server:
port: 8761
spring:
+ application:
+ name: eurekaserver
profiles:
active: dev
+ cloud:
+ inetutils:
+ preferred-networks: 127.0.0.1
+ client:
+ ip-address: 127.0.0.1
eureka:
server:
- enable-self-preservation: false
+ peer-node-read-timeout-ms: 3000
+ enable-self-preservation: true
instance:
- preferIpAddress: true
- hostname: ${spring.cloud.client.ipAddress}
- instanceId: ${spring.cloud.client.ipAddress}:${server.port}
+ prefer-ip-address: false
+ instance-id: ${spring.cloud.client.ip-address}:${server.port}
client:
- registerWithEureka: false
+ registerWithEureka: true
fetchRegistry: false
+ healthcheck:
+ enabled: true
serviceUrl:
- defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
\ No newline at end of file
+ defaultZone: http://127.0.0.1:8761/eureka/
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/feign/pom.xml" "b/\347\254\25410\350\257\276/springcloud/feign/pom.xml"
index 0cede34..ad8a4bc 100644
--- "a/\347\254\25410\350\257\276/springcloud/feign/pom.xml"
+++ "b/\347\254\25410\350\257\276/springcloud/feign/pom.xml"
@@ -14,19 +14,23 @@
org.springframework.cloud
- spring-cloud-starter-eureka
+ spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
- spring-cloud-starter-feign
+ spring-cloud-starter-openfeign
org.springframework.cloud
- spring-cloud-starter-hystrix
+ spring-cloud-starter-netflix-hystrix
+
+
+ org.springframework.boot
+ spring-boot-starter-web
org.springframework.cloud
- spring-cloud-starter-hystrix-dashboard
+ spring-cloud-starter-netflix-hystrix-dashboard
org.springframework.boot
diff --git "a/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiController.java" "b/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiController.java"
index b004046..9879aeb 100644
--- "a/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiController.java"
+++ "b/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiController.java"
@@ -14,4 +14,4 @@ public class ApiController {
public String index(){
return apiService.index();
}
-}
+}
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiService.java" "b/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiService.java"
index ced2a74..b9ee1e8 100644
--- "a/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiService.java"
+++ "b/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiService.java"
@@ -1,6 +1,6 @@
package com.lynn.feign;
-import org.springframework.cloud.netflix.feign.FeignClient;
+import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
diff --git "a/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiServiceError.java" "b/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiServiceError.java"
index bd22401..1f013a6 100644
--- "a/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiServiceError.java"
+++ "b/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/ApiServiceError.java"
@@ -9,4 +9,4 @@ public class ApiServiceError implements ApiService {
public String index() {
return "服务发生故障!";
}
-}
+}
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/Application.java" "b/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/Application.java"
index bb7ab28..4bb9938 100644
--- "a/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/Application.java"
+++ "b/\347\254\25410\350\257\276/springcloud/feign/src/main/java/com/lynn/feign/Application.java"
@@ -1,22 +1,32 @@
package com.lynn.feign;
+import com.netflix.hystrix.contrib.metrics.eventstream.HystrixMetricsStreamServlet;
import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
-import org.springframework.cloud.netflix.feign.EnableFeignClients;
+import org.springframework.boot.web.servlet.ServletRegistrationBean;
+import org.springframework.cloud.client.SpringCloudApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
+import org.springframework.cloud.openfeign.EnableFeignClients;
+import org.springframework.context.annotation.Bean;
-@SpringBootApplication
-@EnableEurekaClient
+@SpringCloudApplication
@EnableFeignClients
@EnableHystrixDashboard
-@EnableCircuitBreaker
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
+ @Bean
+ public ServletRegistrationBean getServlet(){
+ HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
+ ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet );
+ registrationBean.setLoadOnStartup(1);
+ registrationBean.addUrlMappings("/hystrix.stream");
+ registrationBean.setName("HystrixMetricsStreamServlet");
+ return registrationBean;
+ }
+
+
}
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/feign/src/main/resources/application.yml" "b/\347\254\25410\350\257\276/springcloud/feign/src/main/resources/application.yml"
index 8ad1dfa..5c79b6c 100755
--- "a/\347\254\25410\350\257\276/springcloud/feign/src/main/resources/application.yml"
+++ "b/\347\254\25410\350\257\276/springcloud/feign/src/main/resources/application.yml"
@@ -7,6 +7,7 @@ server:
spring:
application:
name: feign
+#开启熔断器
feign:
hystrix:
enabled: true
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/gateway/pom.xml" "b/\347\254\25410\350\257\276/springcloud/gateway/pom.xml"
index a9e9356..a03b45f 100755
--- "a/\347\254\25410\350\257\276/springcloud/gateway/pom.xml"
+++ "b/\347\254\25410\350\257\276/springcloud/gateway/pom.xml"
@@ -14,11 +14,19 @@
org.springframework.cloud
- spring-cloud-starter-eureka
+ spring-cloud-starter-netflix-eureka-client
org.springframework.cloud
- spring-cloud-starter-zuul
+ spring-cloud-starter-gateway
+
+
+ org.springframework.boot
+ spring-boot-starter-webflux
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-hystrix
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiFallbackProvider.java" "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiFallbackProvider.java"
deleted file mode 100755
index 8142ecb..0000000
--- "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiFallbackProvider.java"
+++ /dev/null
@@ -1,64 +0,0 @@
-package com.lynn.gateway;
-
-import org.springframework.cloud.netflix.zuul.filters.route.ZuulFallbackProvider;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.client.ClientHttpResponse;
-import org.springframework.stereotype.Component;
-
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-
-/**
- * 错误拦截
- *
- * @author liyi
- * @create 2018-01-19 16:57
- **/
-@Component
-public class ApiFallbackProvider implements ZuulFallbackProvider{
-
- @Override
- public String getRoute() {
- return "eurekaclient";
- }
-
- @Override
- public ClientHttpResponse fallbackResponse() {
- return new ClientHttpResponse() {
- @Override
- public HttpStatus getStatusCode() throws IOException {
- return HttpStatus.OK;
- }
-
- @Override
- public int getRawStatusCode() throws IOException {
- return 200;
- }
-
- @Override
- public String getStatusText() throws IOException {
- return "{code:0,message:\"服务器异常!\"}";
- }
-
- @Override
- public void close() {
-
- }
-
- @Override
- public InputStream getBody() throws IOException {
- return new ByteArrayInputStream(getStatusText().getBytes());
- }
-
- @Override
- public HttpHeaders getHeaders() {
- HttpHeaders headers = new HttpHeaders();
- headers.setContentType(MediaType.APPLICATION_JSON);
- return headers;
- }
- };
- }
-}
diff --git "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiFilter.java" "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiFilter.java"
deleted file mode 100755
index 744f806..0000000
--- "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiFilter.java"
+++ /dev/null
@@ -1,42 +0,0 @@
-package com.lynn.gateway;
-
-import com.netflix.zuul.ZuulFilter;
-import com.netflix.zuul.context.RequestContext;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.http.HttpServletRequest;
-
-@Component
-public class ApiFilter extends ZuulFilter {
-
- @Override
- public String filterType() {
- return "pre";
- }
-
- @Override
- public int filterOrder() {
- return 0;
- }
-
- @Override
- public boolean shouldFilter() {
- return true;
- }
-
- @Override
- public Object run() {
- //这里写校验代码
- RequestContext context = RequestContext.getCurrentContext();
- HttpServletRequest request = context.getRequest();
- String token = request.getParameter("token");
- if(!"12345".equals(token)){
- context.setSendZuulResponse(false);
- context.setResponseStatusCode(401);
- try {
- context.getResponse().getWriter().write("token is invalid.");
- }catch (Exception e){}
- }
- return null;
- }
-}
diff --git "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiGlobalFilter.java" "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiGlobalFilter.java"
new file mode 100644
index 0000000..d9bf01b
--- /dev/null
+++ "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ApiGlobalFilter.java"
@@ -0,0 +1,36 @@
+package com.lynn.gateway;
+
+import org.apache.commons.lang.StringUtils;
+import org.springframework.cloud.gateway.filter.GatewayFilterChain;
+import org.springframework.cloud.gateway.filter.GlobalFilter;
+import org.springframework.core.io.buffer.DataBuffer;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.server.reactive.ServerHttpResponse;
+import org.springframework.stereotype.Component;
+import org.springframework.web.server.ServerWebExchange;
+import reactor.core.publisher.Mono;
+
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+
+@Component
+public class ApiGlobalFilter implements GlobalFilter {
+
+ @Override
+ public Mono filter(ServerWebExchange exchange, GatewayFilterChain chain) {
+ String token = exchange.getRequest().getQueryParams().getFirst("token");
+ if (StringUtils.isBlank(token)) {
+ ServerHttpResponse response = exchange.getResponse();
+ Map message = new HashMap<>();
+ message.put("status", -1);
+ message.put("data", "鉴权失败");
+ byte[] bits = message.toString().getBytes(StandardCharsets.UTF_8);
+ DataBuffer buffer = response.bufferFactory().wrap(bits);
+ response.setStatusCode(HttpStatus.UNAUTHORIZED);
+ response.getHeaders().add("Content-Type", "text/json;charset=UTF-8");
+ return response.writeWith(Mono.just(buffer));
+ }
+ return chain.filter(exchange);
+ }
+}
diff --git "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/Application.java" "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/Application.java"
index b4e5562..bd9b4fe 100755
--- "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/Application.java"
+++ "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/Application.java"
@@ -1,14 +1,9 @@
package com.lynn.gateway;
import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
-import org.springframework.cloud.netflix.zuul.EnableZuulProxy;
-import org.springframework.cloud.netflix.zuul.EnableZuulServer;
+import org.springframework.cloud.client.SpringCloudApplication;
-@SpringBootApplication
-@EnableEurekaClient
-@EnableZuulProxy
+@SpringCloudApplication
public class Application {
public static void main(String[] args) {
diff --git "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ErrorHandlerConfiguration.java" "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ErrorHandlerConfiguration.java"
new file mode 100644
index 0000000..7092d9e
--- /dev/null
+++ "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/ErrorHandlerConfiguration.java"
@@ -0,0 +1,65 @@
+package com.lynn.gateway;
+
+import org.springframework.beans.factory.ObjectProvider;
+import org.springframework.boot.SpringBootConfiguration;
+import org.springframework.boot.autoconfigure.web.ResourceProperties;
+import org.springframework.boot.autoconfigure.web.ServerProperties;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.boot.web.reactive.error.ErrorAttributes;
+import org.springframework.boot.web.reactive.error.ErrorWebExceptionHandler;
+import org.springframework.context.ApplicationContext;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.Ordered;
+import org.springframework.core.annotation.Order;
+import org.springframework.http.codec.ServerCodecConfigurer;
+import org.springframework.web.reactive.result.view.ViewResolver;
+
+import java.util.Collections;
+import java.util.List;
+
+@SpringBootConfiguration
+@EnableConfigurationProperties({ServerProperties.class, ResourceProperties.class})
+public class ErrorHandlerConfiguration {
+
+ private final ServerProperties serverProperties;
+
+ private final ApplicationContext applicationContext;
+
+ private final ResourceProperties resourceProperties;
+
+ private final List viewResolvers;
+
+ private final ServerCodecConfigurer serverCodecConfigurer;
+
+ public ErrorHandlerConfiguration(ServerProperties serverProperties,
+ ResourceProperties resourceProperties,
+ ObjectProvider> viewResolversProvider,
+ ServerCodecConfigurer serverCodecConfigurer,
+ ApplicationContext applicationContext) {
+ this.serverProperties = serverProperties;
+ this.applicationContext = applicationContext;
+ this.resourceProperties = resourceProperties;
+ this.viewResolvers = viewResolversProvider.getIfAvailable(Collections::emptyList);
+ this.serverCodecConfigurer = serverCodecConfigurer;
+ }
+
+ /**
+ * gateway启动时执行此方法,将JsonExceptionHandler注入到Spring容器中
+ * 以便发生异常时执行自定义的JsonExceptionHandler
+ * @param errorAttributes
+ * @return
+ */
+ @Bean
+ @Order(Ordered.HIGHEST_PRECEDENCE)
+ public ErrorWebExceptionHandler errorWebExceptionHandler(ErrorAttributes errorAttributes) {
+ JsonExceptionHandler exceptionHandler = new JsonExceptionHandler(
+ errorAttributes,
+ this.resourceProperties,
+ this.serverProperties.getError(),
+ this.applicationContext);
+ exceptionHandler.setViewResolvers(this.viewResolvers);
+ exceptionHandler.setMessageWriters(this.serverCodecConfigurer.getWriters());
+ exceptionHandler.setMessageReaders(this.serverCodecConfigurer.getReaders());
+ return exceptionHandler;
+ }
+}
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/JsonExceptionHandler.java" "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/JsonExceptionHandler.java"
new file mode 100644
index 0000000..9d946cd
--- /dev/null
+++ "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/java/com/lynn/gateway/JsonExceptionHandler.java"
@@ -0,0 +1,91 @@
+package com.lynn.gateway;
+
+import org.springframework.boot.autoconfigure.web.ErrorProperties;
+import org.springframework.boot.autoconfigure.web.ResourceProperties;
+import org.springframework.boot.autoconfigure.web.reactive.error.DefaultErrorWebExceptionHandler;
+import org.springframework.boot.web.reactive.error.ErrorAttributes;
+import org.springframework.context.ApplicationContext;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.reactive.function.server.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * 自定义异常处理
+ * SpringBoot提供了默认的异常处理类,即图8-3演示效果,这显然不符合我们的预期
+ * 因此需要重写此类,返回统一的Json格式
+ */
+public class JsonExceptionHandler extends DefaultErrorWebExceptionHandler {
+
+ public JsonExceptionHandler(ErrorAttributes errorAttributes, ResourceProperties resourceProperties,
+ ErrorProperties errorProperties, ApplicationContext applicationContext) {
+ super(errorAttributes, resourceProperties, errorProperties, applicationContext);
+ }
+
+ /**
+ * 获取异常属性
+ */
+ @Override
+ protected Map getErrorAttributes(ServerRequest request, boolean includeStackTrace) {
+ int code = 500;
+ Throwable error = super.getError(request);
+ if (error instanceof org.springframework.cloud.gateway.support.NotFoundException) {
+ code = 404;
+ }
+ return response(code, this.buildMessage(request, error));
+ }
+
+ /**
+ * 指定响应处理方法为JSON处理的方法
+ * @param errorAttributes
+ */
+ @Override
+ protected RouterFunction getRoutingFunction(ErrorAttributes errorAttributes) {
+ return RouterFunctions.route(RequestPredicates.all(), this::renderErrorResponse);
+ }
+
+ /**
+ * 根据code获取对应的HttpStatus
+ * @param errorAttributes
+ */
+ @Override
+ protected HttpStatus getHttpStatus(Map errorAttributes) {
+ int statusCode = (int) errorAttributes.get("code");
+ return HttpStatus.valueOf(statusCode);
+ }
+
+ /**
+ * 构建异常信息
+ * @param request
+ * @param ex
+ * @return
+ */
+ private String buildMessage(ServerRequest request, Throwable ex) {
+ StringBuilder message = new StringBuilder("Failed to handle request [");
+ message.append(request.methodName());
+ message.append(" ");
+ message.append(request.uri());
+ message.append("]");
+ if (ex != null) {
+ message.append(": ");
+ message.append(ex.getMessage());
+ }
+ return message.toString();
+ }
+
+ /**
+ * 构建返回的JSON数据格式
+ * @param status 状态码
+ * @param errorMessage 异常信息
+ * @return
+ */
+ public static Map response(int status, String errorMessage) {
+ Map map = new HashMap<>();
+ map.put("code", status);
+ map.put("message", errorMessage);
+ map.put("data", null);
+ return map;
+ }
+
+}
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/resources/application.yml" "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/resources/application.yml"
index 45062e8..b2f128e 100755
--- "a/\347\254\25410\350\257\276/springcloud/gateway/src/main/resources/application.yml"
+++ "b/\347\254\25410\350\257\276/springcloud/gateway/src/main/resources/application.yml"
@@ -1,14 +1,20 @@
-eureka:
- client:
- serviceUrl:
- defaultZone: http://localhost:8761/eureka/
server:
port: 8080
spring:
application:
name: gateway
-zuul:
- routes:
- api:
- path: /api/**
- serviceId: eurekaclient
+ cloud:
+ gateway:
+ discovery:
+ locator:
+ enabled: true
+logging:
+ level:
+ org.springframework.cloud.gateway: trace
+ org.springframework.http.server.reactive: debug
+ org.springframework.web.reactive: debug
+ reactor.ipc.netty: debug
+eureka:
+ client:
+ serviceUrl:
+ defaultZone: http://localhost:8761/eureka/
\ No newline at end of file
diff --git "a/\347\254\25410\350\257\276/springcloud/pom.xml" "b/\347\254\25410\350\257\276/springcloud/pom.xml"
index 1298563..dabf4a1 100755
--- "a/\347\254\25410\350\257\276/springcloud/pom.xml"
+++ "b/\347\254\25410\350\257\276/springcloud/pom.xml"
@@ -19,15 +19,21 @@
org.springframework.boot
spring-boot-starter-parent
- 1.5.9.RELEASE
+ 2.1.3.RELEASE
+
+
+ org.springframework.cloud
+ spring-cloud-starter-bus-amqp
+
+
org.springframework.cloud
spring-cloud-dependencies
- Dalston.SR5
+ Greenwich.RELEASE
pom
import
diff --git "a/\347\254\25411\350\257\276/springcloud/eurekaclient/pom.xml" "b/\347\254\25411\350\257\276/springcloud/eurekaclient/pom.xml"
index 2dd7c45..41ed015 100755
--- "a/\347\254\25411\350\257\276/springcloud/eurekaclient/pom.xml"
+++ "b/\347\254\25411\350\257\276/springcloud/eurekaclient/pom.xml"
@@ -30,7 +30,7 @@
org.springframework.cloud
- spring-cloud-starter-sleuth
+ spring-cloud-sleuth-zipkin
org.springframework.cloud
diff --git "a/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/config/MyBatisConfig2.java" "b/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/config/MyBatisConfig2.java"
index a811b62..b8e92cf 100644
--- "a/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/config/MyBatisConfig2.java"
+++ "b/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/config/MyBatisConfig2.java"
@@ -44,7 +44,7 @@ public DataSource dataSource(DBConfig2 testConfig) throws SQLException {
return xaDataSource;
}
- @Bean(name = "dqlSessionFactory2")
+ @Bean(name = "sqlSessionFactory2")
public SqlSessionFactory sqlSessionFactory(@Qualifier("dataSource2") DataSource dataSource)
throws Exception {
SqlSessionFactoryBean bean = new SqlSessionFactoryBean();
diff --git "a/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/lock/RedissonConnector.java" "b/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/lock/RedissonConnector.java"
index d26a9c5..3d00c77 100644
--- "a/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/lock/RedissonConnector.java"
+++ "b/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/lock/RedissonConnector.java"
@@ -2,6 +2,8 @@
import org.redisson.Redisson;
import org.redisson.api.RedissonClient;
+import org.redisson.config.Config;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
@@ -11,10 +13,20 @@
*/
@Component
public class RedissonConnector {
+
+ @Value("${spring.redis.host}")
+ private String host;
+ @Value("${spring.redis.port}")
+ private String port;
+// @Value("${spring.redis.password}")
+// private String password;
+
RedissonClient redisson;
@PostConstruct
public void init(){
- redisson = Redisson.create();
+ Config config = new Config();
+ config.useSingleServer().setAddress("redis://"+host+":"+port);
+// redisson = Redisson.create(config);
}
public RedissonClient getClient(){
diff --git "a/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/service/UserService.java" "b/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/service/UserService.java"
index 3ea4c84..a75b837 100644
--- "a/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/service/UserService.java"
+++ "b/\347\254\25413\350\257\276/demo/src/main/java/com/lynn/demo/service/UserService.java"
@@ -18,6 +18,10 @@ public class UserService {
@Transactional
public void addUser(User user)throws Exception{
userMapper1.addUser(user.getName(),user.getAge());
+ String bb = null;
+ if(bb.equals("aa")){
+ System.out.println("test");
+ }
userMapper2.addUser(user.getName(),user.getAge());
}
}
diff --git "a/\347\254\25413\350\257\276/demo/src/main/resources/application.yml" "b/\347\254\25413\350\257\276/demo/src/main/resources/application.yml"
index a052566..374ba86 100644
--- "a/\347\254\25413\350\257\276/demo/src/main/resources/application.yml"
+++ "b/\347\254\25413\350\257\276/demo/src/main/resources/application.yml"
@@ -2,7 +2,7 @@ server:
port: 8080
spring:
redis:
- host: localhost
+ host: 127.0.0.1
port: 6379
mysql:
datasource: