FeignClient如何通過配置變量調用配置文件url
通過配置變量調用配置文件url
1.application.yml 配置文件配置參數
feign: sys: http://127.0.0.1:8777
2.ISysFeignClient.java 使用@FeignClient時配置
@FeignClient(value = "sys",url = "${feign.sys}") public interface ISysFeignClient { @GetMapping("/sys/queryPlatMenus") List<Map<String, Object>> queryPlatMenus(); }
這樣部署開發時就可以隻需要修改一處yml配置url就可以瞭。
調用指定的動態URL
1 創建demo1服務
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.demo</groupId> <artifactId>demo1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo1</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>2020.0.3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </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> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application-dev1.yml
server: port: 8111 spring: application: name: ${APPLICATION_NAME:demo1} eureka: client: fetch-registry: true register-with-eureka: true service-url: defaultZone: http://localhost:18880/eureka instance: instance-id: ${spring.cloud.client.ip-address}:${server.port} prefer-ip-address: true
application-dev2.yml
server: port: 8112 spring: application: name: ${APPLICATION_NAME:demo1} eureka: client: fetch-registry: true register-with-eureka: true service-url: defaultZone: http://localhost:18880/eureka instance: instance-id: ${spring.cloud.client.ip-address}:${server.port} prefer-ip-address: true
IndexController.java
package com.demo.demo1.controller; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; /** * @description: * @author: Evan * @time: 2021/8/2 17:17 */ @RestController public class IndexController { @Value("${server.port}") private String port; @GetMapping("/hello") public String hello(){ System.out.println("進入" + port + "服務器"); return "返回的端口為:" + port; } }
2 創建demo2服務
pom.xml
<?xml version="1.0" encoding="UTF-8"?> <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 https://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.demo</groupId> <artifactId>demo2</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo2</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>2020.0.3</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-openfeign</artifactId> </dependency> <!-- eureka --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </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> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
application.yml
server: port: 8113 spring: application: name: ${APPLICATION_NAME:demo2} eureka: client: fetch-registry: true register-with-eureka: true service-url: defaultZone: http://localhost:18880/eureka instance: instance-id: ${spring.cloud.client.ip-address}:${server.port} prefer-ip-address: true
DemoFeign.java
package com.demo.demo2.Feign; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import java.net.URI; /** * @description: * @author: Evan * @time: 2021/8/2 17:34 */ //@FeignClient(name = "DEMO1", url="EMPTY") @FeignClient(name = "DEMO1", url="http://localhost:8111") public interface DemoFeign { /** * 調用demo1的接口 * @return */ @RequestMapping(value = "/hello", method = RequestMethod.GET) String hello(); /** * 調用demo1的接口 * @return */ @RequestMapping(value = "/hello", method = RequestMethod.GET) String hello1(URI uri); }
IndexController.java
package com.demo.demo2.controller; import com.demo.demo2.Feign.DemoFeign; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.net.URI; /** * @description: * @author: Evan * @time: 2021/8/2 17:33 */ @RestController public class IndexController { @Autowired private DemoFeign demoFeign; @GetMapping("/testFeign") public String testFeign(){ System.out.println("在demo2服務中,調用demo1的服務"); String resultStr = demoFeign.hello(); System.out.println("在demo2服務中,調用demo1的服務,返回的結果:" + resultStr); return "在demo2服務中,調用demo1的服務,返回的結果:" + resultStr; } @GetMapping("/testFeign2") public String testFeign2(@RequestParam String server) throws Exception{ String url = ""; if("1".equals(server)){ url = "http://localhost:8111"; }else if("2".equals(server)){ url = "http://localhost:8112"; } System.out.println("在demo2服務中,調用demo1的服務" + url); String resultStr = demoFeign.hello1(new URI(url)); System.out.println("在demo2服務中,調用demo1的服務,返回的結果:" + resultStr); return "在demo2服務中,調用demo1的服務,返回的結果:" + resultStr; } }
測試
指定服務器ip
- http://localhost:8113/testFeign2?server=1
- 返回【在demo2服務中,調用demo1的服務,返回的結果:返回的端口為:8111】
- http://localhost:8113/testFeign2?server=2
- 返回【在demo2服務中,調用demo1的服務,返回的結果:返回的端口為:8112】
使用默認的地址
- http://localhost:8113/testFeign
- 返回【在demo2服務中,調用demo1的服務,返回的結果:返回的端口為:8111】
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- SpringCloud eureka(server)微服務集群搭建過程
- SpringCloud服務註冊和發現組件Eureka
- Spring Cloud Eureka 註冊與發現操作步驟詳解
- 解析spring cloud ouath2中的Eureka
- SpringCloud2020版本配置與環境搭建教程詳解