FeignClient如何通過配置變量調(diào)用配置文件url
通過配置變量調(diào)用配置文件url
1.application.yml 配置文件配置參數(shù)
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(); }
這樣部署開發(fā)時就可以只需要修改一處yml配置url就可以了。
調(diào)用指定的動態(tài)URL
1 創(chuàng)建demo1服務(wù)
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("進(jìn)入" + port + "服務(wù)器"); ? ? ? ? return "返回的端口為:" + port; ? ? } }
2 創(chuàng)建demo2服務(wù)
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 { /** * 調(diào)用demo1的接口 * @return */ @RequestMapping(value = "/hello", method = RequestMethod.GET) String hello(); /** * 調(diào)用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服務(wù)中,調(diào)用demo1的服務(wù)"); String resultStr = demoFeign.hello(); System.out.println("在demo2服務(wù)中,調(diào)用demo1的服務(wù),返回的結(jié)果:" + resultStr); return "在demo2服務(wù)中,調(diào)用demo1的服務(wù),返回的結(jié)果:" + 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服務(wù)中,調(diào)用demo1的服務(wù)" + url); String resultStr = demoFeign.hello1(new URI(url)); System.out.println("在demo2服務(wù)中,調(diào)用demo1的服務(wù),返回的結(jié)果:" + resultStr); return "在demo2服務(wù)中,調(diào)用demo1的服務(wù),返回的結(jié)果:" + resultStr; } }
測試
指定服務(wù)器ip
- http://localhost:8113/testFeign2?server=1
- 返回【在demo2服務(wù)中,調(diào)用demo1的服務(wù),返回的結(jié)果:返回的端口為:8111】
- http://localhost:8113/testFeign2?server=2
- 返回【在demo2服務(wù)中,調(diào)用demo1的服務(wù),返回的結(jié)果:返回的端口為:8112】
使用默認(rèn)的地址
- http://localhost:8113/testFeign
- 返回【在demo2服務(wù)中,調(diào)用demo1的服務(wù),返回的結(jié)果:返回的端口為:8111】
以上為個人經(jīng)驗(yàn),希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
圖數(shù)據(jù)庫NebulaGraph的Java 數(shù)據(jù)解析實(shí)踐與指導(dǎo)詳解
這篇文章主要介紹了圖數(shù)據(jù)庫NebulaGraph的Java 數(shù)據(jù)解析實(shí)踐與指導(dǎo)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04SpringBoot AOP導(dǎo)致service注入后是null的問題
本文主要講述了如何利用SpringAOP實(shí)現(xiàn)用戶操作日志的記錄,首先,引入SpringBoot的AOP依賴,然后,選擇基于注解的形式來實(shí)現(xiàn)日志操作,以避免污染原有代碼和邏輯,在理解了SpringBootAOP的一些注解后,需要記錄用戶的正常請求以及異常請求的信息2024-10-10Java中transient關(guān)鍵字的詳細(xì)總結(jié)
本文要介紹的是Java中的transient關(guān)鍵字,transient是短暫的意思。對于transient 修飾的成員變量,在類的實(shí)例對象的序列化處理過程中會被忽略,感興趣的朋友可以參考閱讀2023-04-04詳解Spring依賴注入:@Autowired,@Resource和@Inject區(qū)別與實(shí)現(xiàn)原理
這篇文章主要介紹了詳解Spring依賴注入:@Autowired,@Resource和@Inject區(qū)別與實(shí)現(xiàn)原理,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06