SpringBoot之如何正確、安全的關(guān)閉服務(wù)
SpringBoot正確安全的關(guān)閉服務(wù)
我們利用遠(yuǎn)程關(guān)閉功能可以實現(xiàn)優(yōu)雅地關(guān)閉指定地服務(wù)。
正文
本文依然使用v1.5.8.RELEASE ,講地是利用actuator的Endpoints實現(xiàn)關(guān)閉服務(wù)
首先準(zhǔn)備一個eureka服務(wù),然后啟動他。
然后準(zhǔn)備一個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 #禁用密碼驗證 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)配好,這時可以啟動服務(wù)了,將他注冊在eureka上面,這時我們可以看到下面

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

下面筆者要教給大家一種高級使用的方法,做了一個安全的認(rèn)證,上面關(guān)閉服務(wù)的缺點大家顯而易見,知道服務(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 #禁用密碼驗證 endpoints.shutdown.sensitive=true #驗證用戶名 security.user.name=admin #驗證密碼 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>大功告成,是不是很簡單,下面啟動你的客戶端服務(wù),這里我就不貼一些多余的圖片了,成功注冊到eureka上面了,和上面的圖一樣。
接下來使用終端訪問 curl -X POST -u admin:admin 127.0.0.1:8081/custompath
![]()
看見了你的服務(wù)又和你say byebye了吧!
這個命令 curl -X POST -u admin:admin 127.0.0.1:8081/custompath 每一個位置對應(yīng)的參數(shù)值大家可以看application.properties文件分別對應(yīng)了哪些配置就明白了。
SpringBoot2.0.4關(guān)閉程序,我走過的那些坑
首次接觸springboot項目,在本地測試的時候,發(fā)現(xiàn)不知道怎么關(guān)閉程序,雖然后來不得不用殺死進程的方式解決,但總覺得這種方式太簡單粗暴。就準(zhǔn)備問問度娘別人都是怎么做的。
結(jié)果普遍答案是:
步驟:
第一步:引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>第二步:application.properties配置
# 啟用shutdown endpoints.shutdown.enabled=true # 禁用密碼驗證 endpoints.shutdown.sensitive=false
第三步:http://IP:端口號/actuator/shutdown或者h(yuǎn)ttp://IP:端口號/shutdown
結(jié)果:
404!?。。。。?!
為什么總是404?
后來幡然醒悟,別人都是springboot 1.X,而我的是2.X。(springboot變化好大o(╥﹏╥)o)
接著,我繼續(xù)查2.0以上版本怎么解決,結(jié)果大多數(shù)是在啟動類加一推代碼……可能是我不會用吧,反正沒成功。繼續(xù)找……
后來看到大多數(shù)人又說,下面的方式配置:
management:
endpoints:
web:
exposure:
include: "*"然后看日志,發(fā)現(xiàn)所有的端點都打開了,就shutdown沒打開o(╥﹏╥)o
實在找不到相關(guān)博客了,就去官網(wǎng)找答案
官網(wǎng)鏈接https://docs.spring.io/spring-boot/docs/current/reference/html/production-ready-endpoints.html

原來人家默認(rèn)是關(guān)著的,那就打開呀!于是我以為發(fā)現(xiàn)了新大陸,就去打開,據(jù)需看官網(wǎng),看到這樣一句。
management.endpoint.shutdown.enabled=true
添加上去,果然成功!

但是,過程中我曾經(jīng)寫成了這樣:
##錯誤寫法!?。。。。。。。。。。。。。。。?
management:
endpoints:
web:
exposure:
include: "*"
shutdown:
enabled: true注意哈,這是錯誤寫法,我把endpoints當(dāng)成了endpoint?。?!他們可是不一樣的啊!
最終寫法:
management:
endpoints:
web:
exposure:
include: shutdown
#注意下面這個位置!!
endpoint:
shutdown:
enabled: true注:include后面可以添加你想用到的端點 。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java實現(xiàn)創(chuàng)建Zip壓縮包并寫入文件
這篇文章主要為大家詳細(xì)介紹了Java實現(xiàn)創(chuàng)建Zip壓縮包并寫入文件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-01-01
高并發(fā)下如何避免重復(fù)數(shù)據(jù)產(chǎn)生技巧
這篇文章主要為大家介紹了高并發(fā)下如何避免重復(fù)數(shù)據(jù)的產(chǎn)生技巧詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-07-07
Java使用EasyExcel實現(xiàn)Excel的導(dǎo)入導(dǎo)出
這篇文章主要給大家介紹了關(guān)于Java使用EasyExcel實現(xiàn)Excel的導(dǎo)入導(dǎo)出,在各種系統(tǒng)中,導(dǎo)入導(dǎo)出的數(shù)據(jù)一般都是通過Excel來完成的,需要的朋友可以參考下2023-07-07
詳解hibernate雙向多對多關(guān)聯(lián)映射XML與注解版
本篇文章主要介紹了詳解hibernate雙向多對多關(guān)聯(lián)映射XML與注解版,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-05-05
java中關(guān)于移位運算符的demo與總結(jié)(推薦)
下面小編就為大家?guī)硪黄猨ava中關(guān)于移位運算符的demo與總結(jié)(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-05-05
Spring?Boot?Security認(rèn)證之Redis緩存用戶信息詳解
本文介紹了如何使用Spring Boot Security進行認(rèn)證,并通過Redis緩存用戶信息以提高系統(tǒng)性能,通過配置RedisUserDetailsManager,我們成功地將用戶信息存儲到了Redis中,并在Spring Security中進行了集成,需要的朋友可以參考下2024-01-01
IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法
Servlet是JavaWeb應(yīng)用程序中不可或缺的組件之一,本文主要介紹了IDEA創(chuàng)建Servlet程序的兩種實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下2023-10-10
使用EasyPoi實現(xiàn)多Sheet頁導(dǎo)出的示例代碼
在項目開發(fā)中,我們常常會遇到導(dǎo)出多Sheet頁的需求,本文降維打擊介紹一下如何使用EasyPoi實現(xiàn)這一功能,文中的示例代碼簡潔易懂,有需要的可以參考下2025-03-03

