FeignClient如何通过配置变量调用配置文件url

Gilana ·
更新时间:2024-11-14
· 1248 次阅读

目录

通过配置变量调用配置文件url

调用指定的动态URL

1 创建demo1服务

2 创建demo2服务

测试

通过配置变量调用配置文件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】 

以上为个人经验,希望能给大家一个参考,也希望大家多多支持软件开发网。



过配 调用 变量 url

需要 登录 后方可回复, 如果你还没有账号请 注册新账号