欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法

 更新時(shí)間:2018年05月04日 14:04:03   作者:qchery  
本篇文章主要介紹了SpringBoot 實(shí)戰(zhàn) 之 優(yōu)雅終止服務(wù)的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧

由于 SpringBoot 是一個(gè)微服務(wù)框架,其生產(chǎn)部署的方式也需要盡可能的簡(jiǎn)單,與常規(guī)的 Web 應(yīng)用有著一個(gè)巨大的不同之處,它可以內(nèi)嵌一個(gè) Web 容器,如:Tomcat、Jetty等,不再需要將應(yīng)用打包成容器規(guī)定的特定形式。

對(duì)于 SpringBoot 來(lái)說(shuō),打包成一個(gè)簡(jiǎn)單的 Jar 包直接使用 java -jar即可啟動(dòng),這是一種非常優(yōu)雅的方式,但同時(shí)也帶來(lái)了一定的問(wèn)題,如:應(yīng)用如何停止?在過(guò)去,應(yīng)用程序是部署在特定的容器中的,使用容器提供的腳本可以優(yōu)雅停服,但現(xiàn)在容器被內(nèi)嵌了,腳本沒(méi)有了,怎么辦?直接 kill 是一種方式,但未免顯得太過(guò)粗魯,而且可能帶來(lái)許多意想不到的問(wèn)題。

既然我們能想到問(wèn)題,框架的制定者也會(huì)想到,那么他們有沒(méi)有為我們準(zhǔn)備好解決方案呢?答案是有的,下面我介紹下我了解到的幾種方案。

1. 使用 Endpoints

在 SpringBoot 官方文檔的第4部分中介紹了為應(yīng)用發(fā)布生產(chǎn)準(zhǔn)備的各種特性,其中,通過(guò) Actuator 的 HTTP Endpoint,開(kāi)發(fā)人員可以方便地對(duì)應(yīng)用的監(jiān)控與管理。

引入指定的 starter 包:

"org.springframework.boot:spring-boot-starter-actuator:${springbootVersion}"

在 application.yml 中打開(kāi)如下兩個(gè)配置,即可實(shí)現(xiàn)通過(guò) Http 請(qǐng)求停止應(yīng)用

management:
 security:
  enabled: false
endpoints:
 shutdown:
  enabled: true

操作命令如下:

curl -X POST http://host:port/shutdown

但這種方式有一個(gè)非常嚴(yán)重的問(wèn)題,那就是任意人都可以控制應(yīng)用的停止,這對(duì)于一個(gè)生產(chǎn)應(yīng)用無(wú)疑是不可接受的。有些人可能會(huì)想,現(xiàn)在的鏈接地址太簡(jiǎn)單了,非維護(hù)人員也可以輕易地猜出來(lái),如果使用一個(gè)非常復(fù)雜的地址是否可以避免這個(gè)問(wèn)題。很好,這個(gè)提議不錯(cuò),那我們?cè)倏纯?SpringBoot 為我們提供的相關(guān)配置。

endpoints:
 shutdown:
  enabled: true
  path: /xxx

配置完成后,上面的命令就不可用了,需更新命令為:

curl -X POST http://host:port/xxx

其中的/xxx當(dāng)然只是我隨手設(shè)置的一個(gè),你可以設(shè)置任意的地址。雖然安全性高了那么一點(diǎn),但這樣的安全級(jí)別仍然是無(wú)法應(yīng)用到生產(chǎn)環(huán)境的。那是否還有其它的防護(hù)手段呢?有,除了修改shutdown的路徑外,我們還可以給所有的管理操作加上一個(gè)統(tǒng)一的上下文,配置獨(dú)立的端口,并限制指定IP訪問(wèn)(一般限定為本機(jī)),配置如下:

management:
 security:
  enabled: false
 port: 9001
 address: 127.0.0.1
 context-path: /admin

變更后的停服命令為:

curl -X POST http://127.0.0.1:9001/admin/xxx

這樣其實(shí)已經(jīng)足夠安全了,為了進(jìn)一步的保證系統(tǒng)的安全,再給其加上一層 HTTP Basic Auth。

增加 Security 依賴:

"org.springframework.boot:spring-boot-starter-security:${springbootVersion}"

修改配置文件如下:

endpoints:
 shutdown:
  enabled: true
  path: /xxx
management:
 security:
  enabled: true
 port: 9001
 address: 127.0.0.1
 context-path: /admin
security:
 basic:
  enabled: true
  path: /admin
 user:
  name: root
  password: 123456

配置完成后,最終的停服命令為:

curl -X POST -u root:123456 http://127.0.0.1:9001/admin/xxx

2. 注冊(cè)為系統(tǒng)服務(wù)

除了使用 java -jar 運(yùn)行 SpringBoot 應(yīng)用程序外,還可以輕松地用 init.d 或 systemd 注冊(cè)成 Linux/Unix 系統(tǒng)服務(wù),這使得在生產(chǎn)環(huán)境中,安裝和管理 SpringBoot 應(yīng)用程序變得非常簡(jiǎn)單。

在Maven工程里面,為了創(chuàng)建一個(gè)“完全可執(zhí)行”的 jar,需要引入如下插件:

<plugin>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-maven-plugin</artifactId>
  <version>1.5.2.RELEASE</version>
  <configuration>
    <executable>true</executable>
  </configuration>
</plugin>

在 Gradle 工程里面,等效配置如下:

plugins {
  id 'org.springframework.boot' version '1.5.2.RELEASE'
}

springBoot {
  executable = true
}

配置完成后,即可以通過(guò) ./application-name.jar 運(yùn)行構(gòu)建好的應(yīng)用程序。

最后,我們需要將打包好的應(yīng)用程序安裝成一個(gè)init.d 服務(wù),這樣就可以很方便地使用 Unix/Linux 進(jìn)行管理了。操作方式很簡(jiǎn)單,只需要將應(yīng)用程序簡(jiǎn)單的鏈接到 init.d 即可(其中funda為我自己的應(yīng)用名,自己實(shí)驗(yàn)時(shí)需要視情況替換)。

ln -s /app/funda/funda.jar /etc/init.d/funda

檢查鏈接是否建立成功

ls -l /etc/init.d/funda

啟動(dòng)服務(wù),應(yīng)用日志可查看文件 /var/log/funda.log

service funda start

其它常用命令

# 查看應(yīng)用運(yùn)行狀態(tài)
service funda status
# 停止應(yīng)用
service funda stop

問(wèn)題匯總:

在鏈接成功后,應(yīng)用啟動(dòng)時(shí),無(wú)法成功啟動(dòng),提示Unable to find Java,使用如下命令將Jdk的java命令鏈接到/sbin/java即可。

ln -s /usr/local/jdk1.8.0_131/bin/java /sbin/java

參考鏈接:

Endpoints
Monitoring and management over HTTP
Unix/Linux services
Unable to find Java #5690

項(xiàng)目鏈接:

Github : https://github.com/qchery/funda

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • java使用正則表達(dá)式判斷郵箱格式是否正確的方法

    java使用正則表達(dá)式判斷郵箱格式是否正確的方法

    這篇文章主要介紹了java使用正則表達(dá)式判斷郵箱格式是否正確的方法,涉及java正則表達(dá)式及字符串的相關(guān)操作技巧,需要的朋友可以參考下
    2015-07-07
  • 微信開(kāi)發(fā)--自定義菜單查詢返碼亂碼的解決方法

    微信開(kāi)發(fā)--自定義菜單查詢返碼亂碼的解決方法

    本篇文章主要介紹了微信開(kāi)發(fā)--自定義菜單查詢返碼亂碼的解決方法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • 基于Java制作一個(gè)燈謎猜猜樂(lè)游戲

    基于Java制作一個(gè)燈謎猜猜樂(lè)游戲

    中秋佳節(jié),是我國(guó)傳統(tǒng)的重大節(jié)日之一,全國(guó)各地為了增強(qiáng)過(guò)節(jié)的氣氛,都有許多傳統(tǒng)的中秋活動(dòng),比如猜燈謎,所以本文就來(lái)用Java制作一個(gè)燈謎猜猜樂(lè)游戲,感興趣的可以了解下
    2023-09-09
  • Nacos框架與原理之Nacos的參數(shù)

    Nacos框架與原理之Nacos的參數(shù)

    這篇文章主要介紹了Nacos框架與原理之Nacos的參數(shù),Nacos?中的參數(shù)有很多,如:命名空間、分組名、服務(wù)名、保護(hù)閾值、服務(wù)路由類(lèi)型、臨時(shí)實(shí)例等,但下面文章我們要講解的是參數(shù),參數(shù)是什么呢,下面一起進(jìn)去文章學(xué)習(xí)詳細(xì)內(nèi)容吧
    2022-05-05
  • Java中RabbitMQ延遲隊(duì)列實(shí)現(xiàn)詳解

    Java中RabbitMQ延遲隊(duì)列實(shí)現(xiàn)詳解

    這篇文章主要介紹了Java中RabbitMQ延遲隊(duì)列實(shí)現(xiàn)詳解,消息過(guò)期后,根據(jù)routing-key的不同,又會(huì)被死信交換機(jī)路由到不同的死信隊(duì)列中,消費(fèi)者只需要監(jiān)聽(tīng)對(duì)應(yīng)的死信隊(duì)列進(jìn)行消費(fèi)即可,需要的朋友可以參考下
    2023-09-09
  • Java自帶注解、元注解、自定義注解的區(qū)別

    Java自帶注解、元注解、自定義注解的區(qū)別

    本文主要介紹了Java自帶注解、元注解、自定義注解的區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • mybatis注解開(kāi)發(fā)使用foreach方式

    mybatis注解開(kāi)發(fā)使用foreach方式

    這篇文章主要介紹了mybatis注解開(kāi)發(fā)使用foreach方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • java.exe和javaw.exe的區(qū)別及使用方法

    java.exe和javaw.exe的區(qū)別及使用方法

    這篇文章主要介紹了java.exe和javaw.exe的區(qū)別及使用方法,需要的朋友可以參考下
    2014-04-04
  • Java線程狀態(tài)轉(zhuǎn)換關(guān)系實(shí)例解析

    Java線程狀態(tài)轉(zhuǎn)換關(guān)系實(shí)例解析

    這篇文章主要介紹了Java線程狀態(tài)轉(zhuǎn)換關(guān)系實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • rabbitmq使用springboot實(shí)現(xiàn)direct模式(最新推薦)

    rabbitmq使用springboot實(shí)現(xiàn)direct模式(最新推薦)

    這篇文章主要介紹了rabbitmq使用springboot實(shí)現(xiàn)direct模式,本文通過(guò)示例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-07-07

最新評(píng)論