Sfoglia il codice sorgente

0801 openfeign的工程实践

Qing 10 mesi fa
parent
commit
b1cd095f30
32 ha cambiato i file con 549 aggiunte e 31 eliminazioni
  1. 1 1
      springcloud-demo/http/post.http
  2. 32 0
      springcloud-demo/openfeign-service-demo/openfeign-service-api/pom.xml
  3. 13 0
      springcloud-demo/openfeign-service-demo/openfeign-service-api/src/main/java/com/sf/openfeign/client/MyOpenFeignClient.java
  4. 16 0
      springcloud-demo/openfeign-service-demo/openfeign-service-api/src/main/java/com/sf/openfeign/client/dto/UserReqDto.java
  5. 42 0
      springcloud-demo/openfeign-service-demo/openfeign-service/pom.xml
  6. 12 0
      springcloud-demo/openfeign-service-demo/openfeign-service/src/main/java/com/sf/openfeign/service/OpenFeignServiceApplication.java
  7. 17 0
      springcloud-demo/openfeign-service-demo/openfeign-service/src/main/java/com/sf/openfeign/service/controller/HelloController.java
  8. 10 0
      springcloud-demo/openfeign-service-demo/openfeign-service/src/main/java/com/sf/openfeign/service/dto/UserDto.java
  9. 12 0
      springcloud-demo/openfeign-service-demo/openfeign-service/src/main/resources/application.yml
  10. 28 0
      springcloud-demo/openfeign-service-demo/pom.xml
  11. 9 0
      springcloud-demo/pom.xml
  12. 27 1
      springcloud-demo/service-consumer-demo/pom.xml
  13. 0 3
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/ServiceConsumerDemoApplication.java
  14. 31 0
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/feign/FeignConfig.java
  15. 1 2
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/feign/FeignInterceptor.java
  16. 20 0
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/feign/FeignOtherConfig.java
  17. 1 4
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/lb/LoadBalancerConfig.java
  18. 1 2
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/lb/NacosLoadBalancerConfig.java
  19. 1 0
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/ConsumerController.java
  20. 22 0
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/FeignConfigController.java
  21. 26 0
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/OpenFeignServiceController.java
  22. 2 2
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/ProviderController.java
  23. 1 0
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/my/MyRandomController.java
  24. 8 2
      springcloud-demo/service-consumer-demo/src/main/java/com/sf/remote/MyProviderClient.java
  25. 17 0
      springcloud-demo/service-consumer-demo/src/main/resources/application.yml
  26. 115 0
      springcloud-demo/service-provider-demo/data/novel.txt
  27. 1 1
      springcloud-demo/service-provider-demo/pom.xml
  28. 18 0
      springcloud-demo/service-provider-demo/src/main/java/com/sf/controller/FileController.java
  29. 22 0
      springcloud-demo/service-provider-demo/src/main/java/com/sf/controller/TimeOutController.java
  30. 15 0
      springcloud-demo/service-provider-demo/src/test/java/com/sf/DataTests.java
  31. 28 0
      springcloud-demo/service-provider-demo/src/test/java/com/sf/ServiceProviderDemoApplicationTests.java
  32. 0 13
      springcloud-demo/service-provider-demo/src/test/java/com/sf/serviceproviderdemo/ServiceProviderDemoApplicationTests.java

+ 1 - 1
springcloud-demo/http/post.http

@@ -1,4 +1,4 @@
-POST http://localhost:8080/openfeign/postUser
+POST http://localhost:8080/openfeign/service/postUser
 Content-Type: application/json
 
 {

+ 32 - 0
springcloud-demo/openfeign-service-demo/openfeign-service-api/pom.xml

@@ -0,0 +1,32 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.sf</groupId>
+        <artifactId>openfeign-service-demo</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+<!--        <relativePath>../../pom.xml</relativePath>-->
+    </parent>
+
+    <artifactId>openfeign-service-api</artifactId>
+    <packaging>jar</packaging>
+
+    <name>openfeign-service-api</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.cloud</groupId>
+            <artifactId>spring-cloud-starter-openfeign</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+    </dependencies>
+</project>

+ 13 - 0
springcloud-demo/openfeign-service-demo/openfeign-service-api/src/main/java/com/sf/openfeign/client/MyOpenFeignClient.java

@@ -0,0 +1,13 @@
+package com.sf.openfeign.client;
+
+import com.sf.openfeign.client.dto.UserReqDto;
+import org.springframework.cloud.openfeign.FeignClient;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+
+@FeignClient("openfeign-service")
+public interface MyOpenFeignClient {
+
+    @PostMapping("/postUser")
+    String postUser(@RequestBody UserReqDto user);
+}

+ 16 - 0
springcloud-demo/openfeign-service-demo/openfeign-service-api/src/main/java/com/sf/openfeign/client/dto/UserReqDto.java

@@ -0,0 +1,16 @@
+package com.sf.openfeign.client.dto;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@Builder
+@AllArgsConstructor
+@NoArgsConstructor
+public class UserReqDto {
+
+    private String name;
+    private Integer age;
+}

+ 42 - 0
springcloud-demo/openfeign-service-demo/openfeign-service/pom.xml

@@ -0,0 +1,42 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.sf</groupId>
+        <artifactId>openfeign-service-demo</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>openfeign-service</artifactId>
+    <packaging>jar</packaging>
+
+    <name>openfeign-service</name>
+    <url>http://maven.apache.org</url>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>com.alibaba.cloud</groupId>
+            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-test</artifactId>
+            <scope>test</scope>
+        </dependency>
+    </dependencies>
+</project>

+ 12 - 0
springcloud-demo/openfeign-service-demo/openfeign-service/src/main/java/com/sf/openfeign/service/OpenFeignServiceApplication.java

@@ -0,0 +1,12 @@
+package com.sf.openfeign.service;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class OpenFeignServiceApplication {
+
+    public static void main(String[] args) {
+        SpringApplication.run(OpenFeignServiceApplication.class, args);
+    }
+}

+ 17 - 0
springcloud-demo/openfeign-service-demo/openfeign-service/src/main/java/com/sf/openfeign/service/controller/HelloController.java

@@ -0,0 +1,17 @@
+package com.sf.openfeign.service.controller;
+
+import com.sf.openfeign.service.dto.UserDto;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class HelloController {
+
+    // http://localhost:18070/postUser
+    @PostMapping("/postUser")
+    public String postUser(@RequestBody UserDto user) {
+        System.out.println("postUser:" + user);
+        return "postUser success";
+    }
+}

+ 10 - 0
springcloud-demo/openfeign-service-demo/openfeign-service/src/main/java/com/sf/openfeign/service/dto/UserDto.java

@@ -0,0 +1,10 @@
+package com.sf.openfeign.service.dto;
+
+import lombok.Data;
+
+@Data
+public class UserDto {
+
+    private String name;
+    private Integer age;
+}

+ 12 - 0
springcloud-demo/openfeign-service-demo/openfeign-service/src/main/resources/application.yml

@@ -0,0 +1,12 @@
+server:
+  port: 18070
+spring:
+  application:
+    name: openfeign-service
+  cloud:
+    nacos:
+      # 配置nacos的注册中心
+      discovery:
+        server-addr: 127.0.0.1:8848
+        username: nacos
+        password: nacos

+ 28 - 0
springcloud-demo/openfeign-service-demo/pom.xml

@@ -0,0 +1,28 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+    <parent>
+        <groupId>com.sf</groupId>
+        <artifactId>springcloud-demo</artifactId>
+        <version>0.0.1-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>openfeign-service-demo</artifactId>
+    <!-- 父项目的打包方式都是pom -->
+    <packaging>pom</packaging>
+
+    <name>openfeign-service-demo</name>
+    <url>http://maven.apache.org</url>
+
+    <modules>
+        <module>openfeign-service-api</module>
+        <module>openfeign-service</module>
+    </modules>
+
+    <properties>
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+    </properties>
+
+    <!-- 删除引入的依赖 -->
+
+</project>

+ 9 - 0
springcloud-demo/pom.xml

@@ -24,11 +24,14 @@
         <module>nacos-demo</module>
         <module>service-consumer-demo</module>
         <module>service-provider-demo</module>
+        <module>openfeign-service-demo</module>
+        <module>openfeign-service-demo/openfeign-service-api</module>
     </modules>
 
     <!-- 使用属性配置来管理依赖版本 -->
     <properties>
         <java.version>17</java.version>
+        <lombok.version>1.18.34</lombok.version>
         <spring.boot.version>3.2.5</spring.boot.version>
         <spring.cloud.version>2023.0.1</spring.cloud.version>
         <spring.cloud.alibaba.version>2022.0.0.0-RC2</spring.cloud.alibaba.version>
@@ -72,6 +75,12 @@
                 <artifactId>spring-cloud-starter-bootstrap</artifactId>
                 <version>${spring-cloud-starter-bootstrap.version}</version>
             </dependency>
+
+            <dependency>
+                <groupId>org.projectlombok</groupId>
+                <artifactId>lombok</artifactId>
+                <version>${lombok.version}</version>
+            </dependency>
         </dependencies>
     </dependencyManagement>
 

+ 27 - 1
springcloud-demo/service-consumer-demo/pom.xml

@@ -40,10 +40,36 @@
             <artifactId>spring-cloud-starter-openfeign</artifactId>
         </dependency>
 
+        <!-- 引入其他的http包 来代替原生的http -->
+<!--        <dependency>-->
+<!--            <groupId>org.apache.httpcomponents.client5</groupId>-->
+<!--            <artifactId>httpclient5</artifactId>-->
+<!--            <version>5.3</version>-->
+<!--        </dependency>-->
+        <!-- feign-hc5-->
+        <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-hc5</artifactId>
+<!--            <version>13.1</version>-->
+        </dependency>
+
+        <dependency>
+            <groupId>io.github.openfeign</groupId>
+            <artifactId>feign-okhttp</artifactId>
+        </dependency>
+
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
-            <version>1.18.34</version>
+<!--            <version>1.18.34</version>-->
+        </dependency>
+
+        <dependency>
+            <groupId>com.sf</groupId>
+            <artifactId>openfeign-service-api</artifactId>
+<!--            <version>0.0.1-SNAPSHOT</version>-->
+            <!-- 使用变量 项目版本号 来代替写死版本号 -->
+            <version>${project.version}</version>
         </dependency>
 
         <dependency>

+ 0 - 3
springcloud-demo/service-consumer-demo/src/main/java/com/sf/ServiceConsumerDemoApplication.java

@@ -1,10 +1,7 @@
 package com.sf;
 
-import com.sf.config.LoadBalancerConfig;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClientConfiguration;
-import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
 import org.springframework.cloud.openfeign.EnableFeignClients;
 
 // @LoadBalancerClients修改默认配置 使得自定义的配置生效

+ 31 - 0
springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/feign/FeignConfig.java

@@ -0,0 +1,31 @@
+package com.sf.config.feign;
+
+import feign.Logger;
+import feign.Request;
+import feign.Retryer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class FeignConfig {
+
+    // 另一种配置日志级别的方式
+    @Bean
+    public Logger.Level feignLoggerLevel() {
+        return Logger.Level.FULL;
+    }
+
+    // 设置请求的超时时间
+    @Bean
+    public Request.Options options() {
+        return new Request.Options(5000, 5000);
+    }
+
+    @Bean
+    public Retryer retryer() {
+        // 请求失败后是否重试  默认是不重试
+//        return Retryer.NEVER_RETRY;
+        // 最大请求次数为3次 初始间隔时间为100ms 重试最大间隔时间为1s
+        return new Retryer.Default(100,1,3);
+    }
+}

+ 1 - 2
springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/FeignInterceptor.java → springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/feign/FeignInterceptor.java

@@ -1,8 +1,7 @@
-package com.sf.config;
+package com.sf.config.feign;
 
 import feign.RequestInterceptor;
 import feign.RequestTemplate;
-import org.springframework.context.annotation.Configuration;
 
 // feign的拦截器 会使得所有通过feign发送的请求 都携带设置的header信息
 //@Configuration

+ 20 - 0
springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/feign/FeignOtherConfig.java

@@ -0,0 +1,20 @@
+package com.sf.config.feign;
+
+import feign.Logger;
+import feign.Request;
+import org.springframework.context.annotation.Bean;
+
+//@Configuration
+public class FeignOtherConfig {
+
+    // 另一种配置日志级别的方式
+    @Bean
+    public Logger.Level feignLoggerLevel() {
+        return Logger.Level.FULL;
+    }
+
+    @Bean
+    public Request.Options options() {
+        return new Request.Options(5000, 5000);
+    }
+}

+ 1 - 4
springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/LoadBalancerConfig.java → springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/lb/LoadBalancerConfig.java

@@ -1,14 +1,11 @@
-package com.sf.config;
+package com.sf.config.lb;
 
 import org.springframework.cloud.client.ServiceInstance;
 import org.springframework.cloud.loadbalancer.core.RandomLoadBalancer;
 import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
-import org.springframework.cloud.loadbalancer.core.RoundRobinLoadBalancer;
 import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
 import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;
-import org.springframework.context.ConfigurableApplicationContext;
 import org.springframework.context.annotation.Bean;
-import org.springframework.context.annotation.Configuration;
 import org.springframework.core.env.Environment;
 
 //@Configuration

+ 1 - 2
springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/NacosLoadBalancerConfig.java → springcloud-demo/service-consumer-demo/src/main/java/com/sf/config/lb/NacosLoadBalancerConfig.java

@@ -1,10 +1,9 @@
-package com.sf.config;
+package com.sf.config.lb;
 
 import com.alibaba.cloud.nacos.NacosDiscoveryProperties;
 import com.alibaba.cloud.nacos.loadbalancer.NacosLoadBalancer;
 import jakarta.annotation.Resource;
 import org.springframework.cloud.client.ServiceInstance;
-import org.springframework.cloud.loadbalancer.annotation.LoadBalancerClients;
 import org.springframework.cloud.loadbalancer.core.ReactorLoadBalancer;
 import org.springframework.cloud.loadbalancer.core.ServiceInstanceListSupplier;
 import org.springframework.cloud.loadbalancer.support.LoadBalancerClientFactory;

+ 1 - 0
springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/ConsumerController.java

@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 
+// 使用RestTemplate的控制器
 @RestController
 public class ConsumerController {
 

+ 22 - 0
springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/FeignConfigController.java

@@ -0,0 +1,22 @@
+package com.sf.controller;
+
+import com.sf.remote.MyProviderClient;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+// 测试feign的配置 调用超时接口的控制器
+@RestController
+@RequiredArgsConstructor
+public class FeignConfigController {
+
+    private final MyProviderClient myProviderClient;
+
+    // http://localhost:8080/feign/timeout
+    @GetMapping("/feign/timeout")
+    public void feignTimeout() {
+        System.out.println("feign timeout start");
+        myProviderClient.timeout();
+        System.out.println("feign timeout end");
+    }
+}

+ 26 - 0
springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/OpenFeignServiceController.java

@@ -0,0 +1,26 @@
+package com.sf.controller;
+
+import com.sf.dto.UserDto;
+import com.sf.openfeign.client.MyOpenFeignClient;
+import com.sf.openfeign.client.dto.UserReqDto;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+// 调用OpenFeignService的控制器
+@RestController
+public class OpenFeignServiceController {
+
+    @Autowired
+    private MyOpenFeignClient myOpenFeignClient;
+
+    @PostMapping("/openfeign/service/postUser")
+    public String postUser(@RequestBody UserDto user) {
+        System.out.println("postUser:" + user);
+        UserReqDto userReqDto = UserReqDto.builder()
+                .name(user.getName()).age(user.getAge()).build();
+        String result = myOpenFeignClient.postUser(userReqDto);
+        return "result:" + result;
+    }
+}

+ 2 - 2
springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/OpenFeignController.java → springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/ProviderController.java

@@ -6,11 +6,11 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
 import java.util.HashMap;
-import java.util.Locale;
 import java.util.Map;
 
+// 调用Provider的控制器
 @RestController
-public class OpenFeignController {
+public class ProviderController {
 
     // 把MyProviderClient作为对象 从spring容器中注入进来
     @Autowired

+ 1 - 0
springcloud-demo/service-consumer-demo/src/main/java/com/sf/controller/my/MyRandomController.java

@@ -12,6 +12,7 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Random;
 
+// 自己编写的负载均衡的控制器
 // 注意此时的RestConfig中 @LoadBalanced需要注释掉
 @RestController
 public class MyRandomController {

+ 8 - 2
springcloud-demo/service-consumer-demo/src/main/java/com/sf/remote/MyProviderClient.java

@@ -10,6 +10,8 @@ import java.util.Map;
 
 //@LoadBalancerClient(name = "service-provider-demo",
 //        configuration = NacosLoadBalancerConfig.class)
+// 不走通用的配置  单独指定配置
+//@FeignClient(value = "service-provider-demo",configuration = FeignOtherConfig.class)
 @FeignClient("service-provider-demo")
 public interface MyProviderClient {
 
@@ -40,14 +42,14 @@ public interface MyProviderClient {
 
     // 第二种解决方案是
     @GetMapping("/testMultiParam")
-    String testMultiParam(@RequestParam Map<String,Object> map);
+    String testMultiParam(@RequestParam Map<String, Object> map);
 
     @PostMapping("/postUser")
     String postUser(@RequestBody UserDto user);
 
     // 通过openFeign调用其他微服务时 怎么携带请求头
     // 第一种 直接写在方法的注解中
-    @GetMapping(value = "/token",headers = {"token=123456"})
+    @GetMapping(value = "/token", headers = {"token=123456"})
     String token();
 
     // 第二种  方法入参中使用@RequestHeader
@@ -57,4 +59,8 @@ public interface MyProviderClient {
     // 第三种 使用Feign拦截器
     @GetMapping("/token")
     String tokenByInterceptor();
+
+
+    @GetMapping("/timeout")
+    String timeout();
 }

+ 17 - 0
springcloud-demo/service-consumer-demo/src/main/resources/application.yml

@@ -12,6 +12,23 @@ spring:
       # 打开nacos提供的负载均衡
       nacos:
         enabled: true
+    openfeign:
+      # 打开feign和httpclient5的整合
+#      httpclient:
+#        hc5:
+#          enabled: true
+      # 打开feign和okhttp的整合
+       okhttp:
+         enabled: true
+
+      # jdk原生的httpclient
+#      client:
+#        config:
+#          # 微服务名称
+#          service-provider-demo:
+#            connectTimeout: 5000  # 连接超时时间
+#            readTimeout: 5000 # 读取超时时间
+#            loggerLevel: full # 日志级别
 
 server:
   port: 8080

+ 115 - 0
springcloud-demo/service-provider-demo/data/novel.txt

@@ -0,0 +1,115 @@
+1334318182169681920
+1334318497132552192
+1334318818323963904
+1334328310788882432
+1334334734843609088
+1334335471568912384
+1337759637059973121
+1337759773395824640
+1337762752513486849
+1337872061003993088
+1337872316667793408
+1337872488235798528
+1337872597996539904
+1337872898115768320
+1337873148071120896
+1337874646456864768
+1337874812798767104
+1337874951365988352
+1337875255574663168
+1337876581629038592
+1337879143543476224
+1337879206630002688
+1337882606201475072
+1337884719262470144
+1337949399824781312
+1337957605418520576
+1337958745514233856
+1337960531323047936
+1337961040297644032
+1337968514828390400
+1337971702436515840
+1337973622836350976
+1337980004591521792
+1337981165319016448
+1337993641230127104
+1337997125300047872
+1337997343118643200
+1337998237788852224
+1338003550239772672
+1338008717253201920
+1338009992640385024
+1338010234504925184
+1338016212952600576
+1338018955243081728
+1338020917770506240
+1338023305390641152
+1338030962667212800
+1338040506818547712
+1338040707499216896
+1338060391980257280
+1338061984708481024
+1338062435428388864
+1338062919581093888
+1338064558060785664
+1338069939721916416
+1338084112510013440
+1338087760287813632
+1338090080807473152
+1338095930611650560
+1338096209511895040
+1338098849029345280
+1338103259021234176
+1338409289206771712
+1338410664649076736
+1338412067618598912
+1338413569913434112
+1338413707776012288
+1338413765233782784
+1338416134134738944
+1338417307336093696
+1338417923525488640
+1338420014931292160
+1338420576397602816
+1338421914749677568
+1338424191917010944
+1338425367026774016
+1338426419025326080
+1338427751899639808
+1338428361457840129
+1338432000322744320
+1357663182142902272
+1357663733471580160
+1357664822275149824
+1357665926098522112
+1357666733187469312
+1357668191920263169
+1357668717919539200
+1357670120540934144
+1357671204894347265
+1357672011576446976
+1357672502310014976
+1357675307238232064
+1357675644326055936
+1357677274429722624
+1427171978163331072
+1427173199813091328
+1427174312041848832
+1427174314533265408
+1431611431921496064
+1431612847591370752
+1431613237699391488
+1431615838276923392
+1431621906981826560
+1431625876961865728
+1431626349915779072
+1431630568223780864
+1431630596354977792
+1431630596354977793
+1431630596354977794
+1431630596354977795
+1431630596354977796
+1431630596354977799
+1431630596354977802
+1431630596354977803
+1431630596354977804

+ 1 - 1
springcloud-demo/service-provider-demo/pom.xml

@@ -50,7 +50,7 @@
         <dependency>
             <groupId>org.projectlombok</groupId>
             <artifactId>lombok</artifactId>
-            <version>1.18.34</version>
+<!--            <version>1.18.34</version>-->
         </dependency>
 
         <dependency>

+ 18 - 0
springcloud-demo/service-provider-demo/src/main/java/com/sf/controller/FileController.java

@@ -0,0 +1,18 @@
+package com.sf.controller;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.io.File;
+
+@RestController
+public class FileController {
+
+    @GetMapping("file")
+    public String file() {
+        File file = new File("data/novel.txt");
+        System.out.println(file.getAbsoluteFile());
+        System.out.println(file.length());
+        return "";
+    }
+}

+ 22 - 0
springcloud-demo/service-provider-demo/src/main/java/com/sf/controller/TimeOutController.java

@@ -0,0 +1,22 @@
+package com.sf.controller;
+
+import lombok.SneakyThrows;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.time.LocalDateTime;
+import java.util.concurrent.TimeUnit;
+
+@RestController
+public class TimeOutController {
+
+    // http://localhost:8070/timeout
+    @SneakyThrows
+    @GetMapping("/timeout")
+    public String timeout() {
+        System.out.println("timeout:" + LocalDateTime.now());
+//        Thread.sleep(70000);
+        TimeUnit.SECONDS.sleep(70);
+        return "success";
+    }
+}

+ 15 - 0
springcloud-demo/service-provider-demo/src/test/java/com/sf/DataTests.java

@@ -0,0 +1,15 @@
+package com.sf;
+
+import org.junit.jupiter.api.Test;
+
+import java.io.File;
+
+public class DataTests {
+
+    @Test
+    public void test() {
+        File file = new File("data/novel.txt");
+        System.out.println(file.getAbsoluteFile());
+        System.out.println(file.length());
+    }
+}

+ 28 - 0
springcloud-demo/service-provider-demo/src/test/java/com/sf/ServiceProviderDemoApplicationTests.java

@@ -0,0 +1,28 @@
+package com.sf;
+
+import com.sf.controller.FileController;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.context.SpringBootTest;
+
+import java.io.File;
+
+@SpringBootTest
+class ServiceProviderDemoApplicationTests {
+
+    @Autowired
+    private FileController fileController;
+
+    @Test
+    void contextLoads() {
+        File file = new File("data/novel.txt");
+        System.out.println(file.getAbsoluteFile());
+        System.out.println(file.length());
+    }
+
+    @Test
+    public void testFileController() {
+        fileController.file();
+    }
+
+}

+ 0 - 13
springcloud-demo/service-provider-demo/src/test/java/com/sf/serviceproviderdemo/ServiceProviderDemoApplicationTests.java

@@ -1,13 +0,0 @@
-package com.sf.serviceproviderdemo;
-
-import org.junit.jupiter.api.Test;
-import org.springframework.boot.test.context.SpringBootTest;
-
-@SpringBootTest
-class ServiceProviderDemoApplicationTests {
-
-    @Test
-    void contextLoads() {
-    }
-
-}