溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

SpringBoot之怎么正確、安全的關(guān)閉服務(wù)

發(fā)布時(shí)間:2023-03-09 16:31:08 來源:億速云 閱讀:139 作者:iii 欄目:開發(fā)技術(shù)

本篇內(nèi)容主要講解“SpringBoot之怎么正確、安全的關(guān)閉服務(wù)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“SpringBoot之怎么正確、安全的關(guān)閉服務(wù)”吧!

SpringBoot正確安全的關(guān)閉服務(wù)

我們利用遠(yuǎn)程關(guān)閉功能可以實(shí)現(xiàn)優(yōu)雅地關(guān)閉指定地服務(wù)。

正文

本文依然使用v1.5.8.RELEASE ,講地是利用actuatorEndpoints實(shí)現(xiàn)關(guān)閉服務(wù)

首先準(zhǔn)備一個(gè)eureka服務(wù),然后啟動(dòng)他。

然后準(zhǔn)備一個(gè)eureka客戶端服務(wù),客戶端的pom除了必要的springboot的web依賴還需要添加依賴如下

<dependency>
       <groupId>org.springframework.boot</groupId>
       <artifactId>spring-boot-starter-actuator</artifactId>
 </dependency>

在eureka客戶端服務(wù)的application.properties文件開啟shutdown endpoint,SpringBoot的endpoints.shutdown.enabled默認(rèn)是關(guān)閉的。

eureka.client.service-url.defaultZone=http://admin:admin@localhost:1111/eureka/
server.port=8762
spring.application.name=eureka-client
#啟用shutdown
endpoints.shutdown.enabled=true
#禁用密碼驗(yàn)證
endpoints.shutdown.sensitive=false
 
#如果用的2.x版本的 就用注釋的那四行配置
#management.endpoints.shutdown.enabled=true
#management.endpoints.health.enabled=true
#management.endpoints.web.base-path=/
#management.endpoints.web.exposure.include=*

配置已經(jīng)配好,這時(shí)可以啟動(dòng)服務(wù)了,將他注冊(cè)在eureka上面,這時(shí)我們可以看到下面

SpringBoot之怎么正確、安全的關(guān)閉服務(wù)

然后在終端執(zhí)行 curl -X POST 127.0.0.1:8762/shutdown ,可以看到message:Shutting down,bye...說明成功關(guān)閉了服務(wù)

SpringBoot之怎么正確、安全的關(guān)閉服務(wù)

下面筆者要教給大家一種高級(jí)使用的方法,做了一個(gè)安全的認(rèn)證,上面關(guān)閉服務(wù)的缺點(diǎn)大家顯而易見,知道服務(wù)端口和ip的就能關(guān)閉,這種做法很不安全,接下來要在客戶端服務(wù)配置一下安全認(rèn)證。

首先在eureka客戶端服務(wù)的application.properties文件追加配置

eureka.client.service-url.defaultZone=http://admin:admin@localhost:1111/eureka/
server.port=8762
spring.application.name=eureka-client
management.security.enabled=true
#啟用shutdown
endpoints.shutdown.enabled=true
#禁用密碼驗(yàn)證
endpoints.shutdown.sensitive=true
#驗(yàn)證用戶名
security.user.name=admin
#驗(yàn)證密碼
security.user.password=admin
#角色
management.security.role=SUPERUSER
#指定shutdown endpoint的路徑
endpoints.shutdown.path=/custompath
#也可以統(tǒng)一指定所有endpoints的路徑`management.context-path=/manage`
#指定管理端口和IP
management.port=8081
management.address=127.0.0.1

我們使用了security,就需要在pom添加依賴

<dependency>
     <groupId>org.springframework.boot</groupId>
     <artifactId>spring-boot-starter-security</artifactId>
</dependency>

大功告成,是不是很簡(jiǎn)單,下面啟動(dòng)你的客戶端服務(wù),這里我就不貼一些多余的圖片了,成功注冊(cè)到eureka上面了,和上面的圖一樣。

接下來使用終端訪問 curl -X POST -u admin:admin 127.0.0.1:8081/custompath

SpringBoot之怎么正確、安全的關(guān)閉服務(wù)

看見了你的服務(wù)又和你say byebye了吧! 

這個(gè)命令  curl -X POST -u admin:admin 127.0.0.1:8081/custompath  每一個(gè)位置對(duì)應(yīng)的參數(shù)值大家可以看application.properties文件分別對(duì)應(yīng)了哪些配置就明白了。

SpringBoot2.0.4關(guān)閉程序,我走過的那些坑

首次接觸springboot項(xiàng)目,在本地測(cè)試的時(shí)候,發(fā)現(xiàn)不知道怎么關(guān)閉程序,雖然后來不得不用殺死進(jìn)程的方式解決,但總覺得這種方式太簡(jiǎn)單粗暴。就準(zhǔn)備問問度娘別人都是怎么做的。

結(jié)果普遍答案是:

步驟:

第一步:引入依賴

<dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

第二步:application.properties配置

 # 啟用shutdown
endpoints.shutdown.enabled=true
 
# 禁用密碼驗(yàn)證
endpoints.shutdown.sensitive=false

第三步:http://IP:端口號(hào)/actuator/shutdown或者h(yuǎn)ttp://IP:端口號(hào)/shutdown

結(jié)果:

404!?。。。。。?/strong>

為什么總是404?

后來幡然醒悟,別人都是springboot 1.X,而我的是2.X。(springboot變化好大o(╥﹏╥)o)

接著,我繼續(xù)查2.0以上版本怎么解決,結(jié)果大多數(shù)是在啟動(dòng)類加一推代碼&hellip;&hellip;可能是我不會(huì)用吧,反正沒成功。繼續(xù)找&hellip;&hellip;

后來看到大多數(shù)人又說,下面的方式配置:

management:
  endpoints:
    web:
      exposure:
        include: "*"

然后看日志,發(fā)現(xiàn)所有的端點(diǎn)都打開了,就shutdown沒打開o(╥﹏╥)o

實(shí)在找不到相關(guān)博客了,就去官網(wǎng)找答案

SpringBoot之怎么正確、安全的關(guān)閉服務(wù)

原來人家默認(rèn)是關(guān)著的,那就打開呀!于是我以為發(fā)現(xiàn)了新大陸,就去打開,據(jù)需看官網(wǎng),看到這樣一句。

management.endpoint.shutdown.enabled=true

 添加上去,果然成功!

SpringBoot之怎么正確、安全的關(guān)閉服務(wù)

但是,過程中我曾經(jīng)寫成了這樣:

##錯(cuò)誤寫法?。。。。。。。。。。。。。。。?!
management:
  endpoints:
    web:
      exposure:
       include: "*" 
    shutdown:
      enabled: true

注意哈,這是錯(cuò)誤寫法,我把endpoints當(dāng)成了endpoint?。?!他們可是不一樣的啊! 

最終寫法:

management:
  endpoints:
    web:
      exposure:
       include: shutdown 
    #注意下面這個(gè)位置!!
  endpoint:
    shutdown:
      enabled: true

注:include后面可以添加你想用到的端點(diǎn) 。

到此,相信大家對(duì)“SpringBoot之怎么正確、安全的關(guān)閉服務(wù)”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI