SpringCloud中Eureka的配置及使用講解
Eureka 采用 CS(Client/Server,客戶端/服務(wù)器) 架構(gòu),它包括以下兩大組件:
- Eureka Server:Eureka 服務(wù)注冊(cè)中心,主要用于提供服務(wù)注冊(cè)功能。當(dāng)微服務(wù)啟動(dòng)時(shí),會(huì)將自己的服務(wù)注冊(cè)到 Eureka Server。Eureka Server 維護(hù)了一個(gè)可用服務(wù)列表,存儲(chǔ)了所有注冊(cè)到 Eureka Server 的可用服務(wù)的信息,這些可用服務(wù)可以在 Eureka Server 的管理界面中直觀看到。
- Eureka Client:Eureka 客戶端,通常指的是微服務(wù)系統(tǒng)中各個(gè)微服務(wù),主要用于和 Eureka Server 進(jìn)行交互。在微服務(wù)應(yīng)用啟動(dòng)后,Eureka Client 會(huì)向 Eureka Server 發(fā)送心跳(默認(rèn)周期為 30 秒)。若 Eureka Server 在多個(gè)心跳周期內(nèi)沒(méi)有接收到某個(gè) Eureka Client 的心跳,Eureka Server 將它從可用服務(wù)列表中移除(默認(rèn) 90 秒)。
比較官方的語(yǔ)言,我們還是通俗易懂的來(lái)講一下這個(gè)東西,其實(shí)就相當(dāng)于,因?yàn)槲覀兪褂梦⒎?wù)是把每一個(gè)服務(wù)單獨(dú)進(jìn)行管理,單獨(dú)管理就會(huì)出現(xiàn)需要數(shù)據(jù)直接的通信問(wèn)題,例如:商品的倉(cāng)庫(kù)是一個(gè)服務(wù),售賣(mài)產(chǎn)品也是一個(gè)服務(wù),但現(xiàn)在放在不同的地方,所以假如賣(mài)出一件商品,就需要告訴倉(cāng)庫(kù),應(yīng)該減少一件產(chǎn)品,這樣就達(dá)到了微服務(wù)的思想,而我們之前所了解的springboot就不一樣,springboot是將所有的服務(wù)都集中在一起管理。
講解完后,我們正式進(jìn)行Eureka的配置和使用的講解
說(shuō)真的,講了很多的配置,這個(gè)配置確實(shí)算是比較復(fù)雜,而且出現(xiàn)問(wèn)題的地方可能有很多,一定要注意很多細(xì)節(jié)的處理,不然有可能服務(wù)都能啟動(dòng)就是掛載不上的也有可能出現(xiàn)的,接下來(lái)我們先配置最基本啟動(dòng)Eureka的服務(wù)配置
創(chuàng)建基本項(xiàng)目、導(dǎo)包
第一個(gè)我們創(chuàng)建項(xiàng)目,首先創(chuàng)建都是基于marven來(lái)管理的
這里有個(gè)坑,這個(gè)URL的網(wǎng)址有時(shí)候會(huì)有問(wèn)題,等一會(huì)兒就好了,或者重啟一下idea,還有是可以換成阿里巴巴的URL,不過(guò)很多時(shí)候是正常的,建項(xiàng)目完成后,我們?cè)诋?dāng)中在導(dǎo)入modules,導(dǎo)入的modules就使用spring Initializr的
構(gòu)建完成這個(gè)項(xiàng)目后,可以把父文件中的pom文件都刪除,因?yàn)槲覀兣渲玫膒om都是在每一個(gè)獨(dú)立的服務(wù)中
我們創(chuàng)建springboot項(xiàng)目的時(shí)候,可以勾選后就自定幫助我們把包可以自動(dòng)的講包依賴(lài)在我們的pom文件中,你可以不勾選,因?yàn)橄旅嫖叶紩?huì)告訴你需要導(dǎo)入的jar包有哪些。
我們構(gòu)建三個(gè)服務(wù),一個(gè)是配置服務(wù),另一個(gè)是提供者(相當(dāng)于接口的提供者),另一個(gè)是消費(fèi)者(相當(dāng)于調(diào)用接口)。
配置Eureka服務(wù)
第一個(gè)配置:使用modules導(dǎo)入進(jìn)來(lái)后,進(jìn)入pom文件下,導(dǎo)入我們需要的包
<?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.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo1</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo1</name> <description>demo1</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.3</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>
我這個(gè)是最新的springBoot和spirngCloud所以不會(huì)出現(xiàn)版本不兼容的問(wèn)題,但是這里的坑就在于,很多朋友可能就是因?yàn)榘姹炯嫒莸膯?wèn)題,所以這里是會(huì)出錯(cuò)的,如果想了解什么樣的springBoot可以配置什么樣的springCloud可以在marven的官網(wǎng)查看spring-boot-starter去搜索一下就會(huì)出來(lái)了。一定要看清楚,和我配置的一樣不,不然就會(huì)爆紅或者報(bào)錯(cuò)了,還有就是注意,導(dǎo)入進(jìn)來(lái)后,記得刷新一下marven這樣才會(huì)下載jar包進(jìn)來(lái)
這里也就是我們的pom文件的配置,下面我們需要配置yml文件對(duì)eureka中的具體做配置,創(chuàng)建一個(gè)application.yml文件,如果不是綠葉的,可以去看下我寫(xiě)的另一篇文章 SpringBoot綠葉顯示yml和端口問(wèn)題
創(chuàng)建完成之后在里面配置如下信息
server:
port: 8087
spring:
application:
name: demo1
eureka:
instance:
hostname: localhost #hostname是eureka集群服務(wù)器之間的區(qū)分
client:
registerWithEureka: false #不向自身注冊(cè)。由于該應(yīng)用為單個(gè)注冊(cè)中心,所以設(shè)置為false,代表不向注冊(cè)中心注冊(cè)自己
fetchRegistry: false #不從自身拉取注冊(cè)信息。由于單個(gè)注冊(cè)中心,不拉取自身信息
server:
enableSelfPreservation: false # eureka 的自我保護(hù)狀態(tài):心跳失敗的比例,在15分鐘內(nèi)是否超過(guò)85%,如果出現(xiàn)了超過(guò)的情況,Eureka Server會(huì)將當(dāng)前的實(shí)例注冊(cè)信息保護(hù)起來(lái),同時(shí)提示一個(gè)警告,一旦進(jìn)入保護(hù)模式,Eureka Server將會(huì)嘗試保護(hù)其服務(wù)注冊(cè)表中的信息,不再刪除服務(wù)注冊(cè)表中的數(shù)據(jù)。也就是不會(huì)注銷(xiāo)任何微服務(wù)。測(cè)試階段將其關(guān)閉
這里注意的點(diǎn)是,配置的hostname就是需要訪問(wèn)的地址,就是注冊(cè)中心的名字,其他的配置屬性看看是什么意思,都有注釋的
配置完成后,我們?cè)趕pringboot的啟動(dòng)項(xiàng)上添加注解@EnableEurekaserver,導(dǎo)入完成之后,我們的服務(wù)就是可以跑起來(lái)的了,啟動(dòng)項(xiàng)目,在網(wǎng)頁(yè)中打開(kāi)http://localhost:8087(我這里配置的端口號(hào)為8087),就看到下面這個(gè)畫(huà)面
箭頭這里看到,還沒(méi)有實(shí)例的服務(wù)進(jìn)來(lái),所以我們接下來(lái)就可以開(kāi)始配置消費(fèi)者和提供者了。
配置提供者(提供接口)
我們?cè)诟讣?jí)的目錄在添加一個(gè)marven的modules,構(gòu)建完基礎(chǔ)的,我們直接講解配置
配置提供者的pom文件, 如下是配置信息
<?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.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo2</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo2</name> <description>demo2</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.3</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>
一定要看清,我這里配置的是spring-cloud-starter-netflix-eureka-client的,和剛剛spring-cloud-starter-netflix-eureka-serve是不一樣的,在配置完pom文件后,我們?cè)谂渲卯?dāng)中的application.yml文件
server:
port: 8082
eureka:
client:
registerWithEureka: true
fetchRegistry: true
service-url: # eureka server 的地址, 咱們單實(shí)例模式就寫(xiě)自己好了
defaultZone: http://localhost:8087/eureka
spring:
application:
name: demo2
這里有坑注意
①我們可能會(huì)因?yàn)榘姹咎?hào)的原因?qū)е聅ervice-url爆紅,并且defaultZone會(huì)沒(méi)有,但是沒(méi)關(guān)系,直接復(fù)制過(guò)去我的就可以用了
②registerWithEureka的設(shè)置要改為true,因?yàn)閯倓偸欠?wù)不用自我去注冊(cè)和下面的fetchRegistry拉取自身信息,但是現(xiàn)在已經(jīng)是要用了,就不是提供的服務(wù)了,所以需要該問(wèn)true
③spring-application-name要填,這樣方便在Eureka的網(wǎng)站中更清楚的看到有沒(méi)有注冊(cè)進(jìn)來(lái)
④在defaultzone中連接的名字為剛剛啟用服務(wù)的名字,后面需要/eureka
我們寫(xiě)完這些后,因?yàn)槲覀冞@里寫(xiě)的是提供者,所以還需要寫(xiě)一個(gè)接口,直接寫(xiě)一個(gè)Controller
package com.example.demo2.controll; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class Controll { @GetMapping(value = "/hello") public String index() { return "hello provider"; } }
我們還需要配置最后的主類(lèi),在主類(lèi)中配置如下
import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @SpringBootApplication @EnableEurekaClient public class Demo2Application { public static void main(String[] args) { SpringApplication.run(Demo2Application.class, args); } }
這樣的話就是可以使用了,我們啟動(dòng)一下,測(cè)試看看能不能在Eureka中找到這個(gè)名為demo2的服務(wù)
這樣就可以看到多了一個(gè)服務(wù)叫做Demo2的服務(wù)
配置消費(fèi)者(調(diào)用接口)
這個(gè)調(diào)用接口中,我們會(huì)使用到RestTemplate的用法,如果不了解,可以看下我的這篇Java中使用RestTemplate
一樣的,我們先構(gòu)建modules后,配置當(dāng)中的pom文件
<?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.7.3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>demo3</artifactId> <version>0.0.1-SNAPSHOT</version> <name>demo3</name> <description>demo3</description> <properties> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>2021.0.3</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>
這個(gè)的配置和提供者的配置pom文件一致,都是服務(wù)所以一致,因?yàn)樵贓ureka中可以充當(dāng)提供者也可以充當(dāng)消費(fèi)者。下面配置的是application.yml文件
server: port: 8089 spring: application: name: demo3 eureka: client: registerWithEureka: true fetchRegistry: true service-url: # eureka server 的地址, 咱們單實(shí)例模式就寫(xiě)自己好了 defaultZone: http://localhost:8087/eureka instance: status-page-url: http://localhost:8082/hello
這里講解坑的地方
①一樣的,regsiterWithEureka和fetchRegistry需要設(shè)置為true
②我這里多配置了一個(gè)instance-status-page-url,這是配置的我們需要跳轉(zhuǎn)的網(wǎng)址,我們就是通過(guò)這種方式,可以在不同的端口下進(jìn)行相互的訪問(wèn),也就可以通過(guò)發(fā)送請(qǐng)求和獲取數(shù)據(jù)達(dá)到數(shù)據(jù)傳輸?shù)男Ч?/p>
下面我們寫(xiě)發(fā)送請(qǐng)求
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; public class Contros { @Resource RestTemplate restTemplate; @RequestMapping("/hello") public String hello(){ return restTemplate.getForEntity("http://localhost:8082/hello",String.class).getBody(); } }
可能有人會(huì)問(wèn),為什么剛剛已經(jīng)寫(xiě)了和這個(gè)getForEntity后面一模一樣的地址,這個(gè)其實(shí)是因?yàn)椋趛ml文件中配置的我們可以在Eureka中直接點(diǎn)擊網(wǎng)址就可以跳轉(zhuǎn),沒(méi)有設(shè)置的話,是不會(huì)跳轉(zhuǎn)的,這里的話就是真實(shí)的發(fā)起請(qǐng)求的路徑。
之后我們配置主類(lèi)
@SpringBootApplication @EnableDiscoveryClient public class Demo3Application { @Bean @LoadBalanced RestTemplate restTemplate(){ return new RestTemplate(); } public static void main(String[] args) { SpringApplication.run(Demo3Application.class, args); } }
這里有一個(gè)@Bean下和@LoadBalanced的注解下寫(xiě)了返回一個(gè)發(fā)請(qǐng)求的RestTemplate,這是我們依賴(lài)注入RestTemplate并且@LoadBalanced(負(fù)載均衡)是系統(tǒng)處理高并發(fā)、緩解網(wǎng)絡(luò)壓力和服務(wù)端擴(kuò)容的重要手段之一。
啟用服務(wù),會(huì)發(fā)現(xiàn)下圖所示
我們可以看見(jiàn)我們剛剛配置yml中的作用就在這里,我們是可以訪問(wèn)Demo2的接口的,直接點(diǎn)擊一下就可以跳轉(zhuǎn)到我們調(diào)用的接口中了
Ribbon
負(fù)載均衡(Load Balance) ,簡(jiǎn)單點(diǎn)說(shuō)就是將用戶的請(qǐng)求平攤分配到多個(gè)服務(wù)器上運(yùn)行,以達(dá)到擴(kuò)展服務(wù)器帶寬、增強(qiáng)數(shù)據(jù)處理能力、增加吞吐量、提高網(wǎng)絡(luò)的可用性和靈活性的目的。
常見(jiàn)的負(fù)載均衡方式有兩種:
- 服務(wù)端負(fù)載均衡
- 客戶端負(fù)載均衡
服務(wù)端負(fù)載均衡
服務(wù)端負(fù)載均衡是最常見(jiàn)的負(fù)載均衡方式,其工作原理如下圖。
圖1:服務(wù)端負(fù)載均衡工作原理
服務(wù)端負(fù)載均衡是在客戶端和服務(wù)端之間建立一個(gè)獨(dú)立的負(fù)載均衡服務(wù)器,該服務(wù)器既可以是硬件設(shè)備(例如 F5),也可以是軟件(例如 Nginx)。這個(gè)負(fù)載均衡服務(wù)器維護(hù)了一份可用服務(wù)端清單,然后通過(guò)心跳機(jī)制來(lái)刪除故障的服務(wù)端節(jié)點(diǎn),以保證清單中的所有服務(wù)節(jié)點(diǎn)都是可以正常訪問(wèn)的。
當(dāng)客戶端發(fā)送請(qǐng)求時(shí),該請(qǐng)求不會(huì)直接發(fā)送到服務(wù)端進(jìn)行處理,而是全部交給負(fù)載均衡服務(wù)器,由負(fù)載均衡服務(wù)器按照某種算法(例如輪詢、隨機(jī)等),從其維護(hù)的可用服務(wù)清單中選擇一個(gè)服務(wù)端,然后進(jìn)行轉(zhuǎn)發(fā)。
服務(wù)端負(fù)載均衡具有以下特點(diǎn):
- 需要建立一個(gè)獨(dú)立的負(fù)載均衡服務(wù)器。
- 負(fù)載均衡是在客戶端發(fā)送請(qǐng)求后進(jìn)行的,因此客戶端并不知道到底是哪個(gè)服務(wù)端提供的服務(wù)。
- 可用服務(wù)端清單存儲(chǔ)在負(fù)載均衡服務(wù)器上。
客戶端負(fù)載均衡
相較于服務(wù)端負(fù)載均衡,客戶端服務(wù)在均衡則是一個(gè)比較小眾的概念。
客戶端負(fù)載均衡的工作原理如下圖。
圖2:客戶端負(fù)載均衡工作原理
客戶端負(fù)載均衡是將負(fù)載均衡邏輯以代碼的形式封裝到客戶端上,即負(fù)載均衡器位于客戶端??蛻舳送ㄟ^(guò)服務(wù)注冊(cè)中心(例如 Eureka Server)獲取到一份服務(wù)端提供的可用服務(wù)清單。有了服務(wù)清單后,負(fù)載均衡器會(huì)在客戶端發(fā)送請(qǐng)求前通過(guò)負(fù)載均衡算法選擇一個(gè)服務(wù)端實(shí)例再進(jìn)行訪問(wèn),以達(dá)到負(fù)載均衡的目的;
客戶端負(fù)載均衡也需要心跳機(jī)制去維護(hù)服務(wù)端清單的有效性,這個(gè)過(guò)程需要配合服務(wù)注冊(cè)中心一起完成。
客戶端負(fù)載均衡具有以下特點(diǎn):
- 負(fù)載均衡器位于客戶端,不需要單獨(dú)搭建一個(gè)負(fù)載均衡服務(wù)器。
- 負(fù)載均衡是在客戶端發(fā)送請(qǐng)求前進(jìn)行的,因此客戶端清楚地知道是哪個(gè)服務(wù)端提供的服務(wù)。
- 客戶端都維護(hù)了一份可用服務(wù)清單,而這份清單都是從服務(wù)注冊(cè)中心獲取的。
Ribbon 就是一個(gè)基于 HTTP 和 TCP 的客戶端負(fù)載均衡器,當(dāng)我們將 Ribbon 和 Eureka 一起使用時(shí),Ribbon 會(huì)從 Eureka Server(服務(wù)注冊(cè)中心)中獲取服務(wù)端列表,然后通過(guò)負(fù)載均衡策略將請(qǐng)求分?jǐn)偨o多個(gè)服務(wù)提供者,從而達(dá)到負(fù)載均衡的目的。
Ribbon 可以與 RestTemplate(Rest 模板)配合使用,以實(shí)現(xiàn)微服務(wù)之間的調(diào)用。
RestTemplate 是 Spring 家族中的一個(gè)用于消費(fèi)第三方 REST 服務(wù)的請(qǐng)求框架。RestTemplate 實(shí)現(xiàn)了對(duì) HTTP 請(qǐng)求的封裝,提供了一套模板化的服務(wù)調(diào)用方法。通過(guò)它,Spring 應(yīng)用可以很方便地對(duì)各種類(lèi)型的 HTTP 請(qǐng)求進(jìn)行訪問(wèn)。
RestTemplate 針對(duì)各種類(lèi)型的 HTTP 請(qǐng)求都提供了相應(yīng)的方法進(jìn)行處理,例如 HEAD、GET、POST、PUT、DELETE 等類(lèi)型的 HTTP 請(qǐng)求,分別對(duì)應(yīng) RestTemplate 中的 headForHeaders()、getForObject()、postForObject()、put() 以及 delete() 方法。
最后總結(jié)
我們這里主要的配置文件和主要調(diào)用的API,都是在Eureka中會(huì)常常使用的,我們還可以 在當(dāng)中配置更多的接口和發(fā)起更多的請(qǐng)求,這樣就達(dá)到我們獨(dú)立的模塊,但卻可以將數(shù)據(jù)共享出來(lái)的效果,這也就是SpringCloud的重要思想,但我們所講的這種是單例的,并不是集群的,還有就是Ribbon了解主要解決了什么問(wèn)題就可以了,先了解,后深入
到此這篇關(guān)于SpringCloud中Eureka的配置及詳細(xì)使用的文章就介紹到這了,更多相關(guān)SpringCloud Eureka使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
springboot前后臺(tái)數(shù)據(jù)交互的示例代碼
這篇文章主要介紹了springboot前后臺(tái)數(shù)據(jù)交互的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-10-10SpringMVC請(qǐng)求、響應(yīng)和攔截器的使用實(shí)例詳解
攔截器(Interceptor) 它是一個(gè)Spring組件,并由Spring容器管理,并不依賴(lài)Tomcat等容器,是可以單獨(dú)使用的,這篇文章給大家介紹SpringMVC請(qǐng)求、響應(yīng)和攔截器的使用,感興趣的朋友一起看看吧2024-03-03seata-1.4.0安裝及在springcloud中使用詳解
這篇文章主要介紹了seata-1.4.0安裝及在springcloud中使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12SpringBoot結(jié)合Swagger2自動(dòng)生成api文檔的方法
這篇文章主要介紹了SpringBoot結(jié)合Swagger2自動(dòng)生成api文檔的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-05-05Java如何替換RequestBody和RequestParam參數(shù)的屬性
近期由于接手的老項(xiàng)目中存在所有接口中新增一個(gè)加密串來(lái)給接口做一個(gè)加密效果,所以就研究了一下Http請(qǐng)求鏈路,發(fā)現(xiàn)可以通過(guò)?javax.servlet.Filter去實(shí)現(xiàn),這篇文章主要介紹了Java替換RequestBody和RequestParam參數(shù)的屬性,需要的朋友可以參考下2023-10-10