最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

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

既然我們能想到問題,框架的制定者也會想到,那么他們有沒有為我們準備好解決方案呢?答案是有的,下面我介紹下我了解到的幾種方案。

1. 使用 Endpoints

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

引入指定的 starter 包:

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

在 application.yml 中打開如下兩個配置,即可實現(xiàn)通過 Http 請求停止應(yīng)用

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

操作命令如下:

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

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

endpoints:
 shutdown:
  enabled: true
  path: /xxx

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

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

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

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

這樣其實已經(jīng)足夠安全了,為了進一步的保證系統(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. 注冊為系統(tǒng)服務(wù)

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

在Maven工程里面,為了創(chuàng)建一個“完全可執(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
}

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

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

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

檢查鏈接是否建立成功

ls -l /etc/init.d/funda

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

service funda start

其它常用命令

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

問題匯總:

在鏈接成功后,應(yī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

項目鏈接:

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

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

相關(guān)文章

  • JAVA 繼承基本類、抽象類、接口介紹

    JAVA 繼承基本類、抽象類、接口介紹

    Java是一個面向?qū)ο蟮恼Z言,java面向?qū)ο笠话阌腥筇卣鳎悍庋b、繼承、多態(tài)
    2013-01-01
  • 詳解Java線程池如何統(tǒng)計線程空閑時間

    詳解Java線程池如何統(tǒng)計線程空閑時間

    這篇文章主要和大家分享一個面試題:Java線程池是怎么統(tǒng)計線程空閑時間?文中的示例代碼講解詳細,對我們掌握Java有一定幫助,需要的可以參考一下
    2022-11-11
  • Scala隱式轉(zhuǎn)換和隱式參數(shù)詳解

    Scala隱式轉(zhuǎn)換和隱式參數(shù)詳解

    Scala隱式轉(zhuǎn)換和隱式參數(shù)是兩個非常強大的功能,它們可以讓我們編寫更靈活和優(yōu)雅的代碼,但也需要注意一些潛在的問題和風險,這篇文章主要介紹了Scala隱式轉(zhuǎn)換和隱式參數(shù),需要的朋友可以參考下
    2023-04-04
  • 關(guān)于工廠方法模式的Java實現(xiàn)

    關(guān)于工廠方法模式的Java實現(xiàn)

    這篇文章主要介紹了關(guān)于工廠方法模式的Java實現(xiàn)講解,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • RestTemplate Get請求實現(xiàn)bean參數(shù)傳遞詳解

    RestTemplate Get請求實現(xiàn)bean參數(shù)傳遞詳解

    RestTemplate 是從 Spring3.0 開始支持的一個 HTTP 請求工具,也有的稱之為網(wǎng)絡(luò)框架,說白了就是Java版本的一個postman,這篇文章主要介紹了詳解RestTemplate 用法,需要的朋友可以參考下
    2022-11-11
  • FeignClient支持運行時動態(tài)指定URL方式

    FeignClient支持運行時動態(tài)指定URL方式

    在實際開發(fā)中,我們經(jīng)常通過FeignClient接口調(diào)用三方API,當面對不同的環(huán)境對應(yīng)不同的地址時,可以通過配置文件和占位符來切換,但在同一個環(huán)境中需要調(diào)用不同地址的相同接口時,這種方法就失效了,此時,可以通過實現(xiàn)RequestInterceptor接口來動態(tài)切換地址
    2024-11-11
  • java多線程并發(fā)executorservice(任務(wù)調(diào)度)類

    java多線程并發(fā)executorservice(任務(wù)調(diào)度)類

    這篇文章主要介紹了線程并發(fā)ScheduledExecutorService類,設(shè)置 ScheduledExecutorService ,2秒后,在 1 分鐘內(nèi)每 10 秒鐘蜂鳴一次
    2014-01-01
  • JavaWeb實現(xiàn)多文件上傳及zip打包下載

    JavaWeb實現(xiàn)多文件上傳及zip打包下載

    這篇文章主要為大家詳細介紹了JavaWeb實現(xiàn)多文件上傳及zip打包下載,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Mybatis Criteria使用and和or進行聯(lián)合條件查詢的操作方法

    Mybatis Criteria使用and和or進行聯(lián)合條件查詢的操作方法

    這篇文章主要介紹了Mybatis Criteria的and和or進行聯(lián)合條件查詢的方法,本文通過例子給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-10-10
  • java讀取word-excel-ppt文件代碼

    java讀取word-excel-ppt文件代碼

    OFFICE文檔使用POI控件,PDF可以使用PDFBOX0.7.3控件,完全支持中文,用XPDF也行,不過感覺PDFBOX比較好,而且作者也在更新。水平有限,萬望各位指正
    2009-04-04

最新評論

晋宁县| 西宁市| 毕节市| 陆川县| 额尔古纳市| 游戏| 平湖市| 融水| 九龙城区| 舒城县| 上饶市| 衡东县| 瑞金市| 斗六市| 宽甸| 江门市| 深泽县| 三江| 麻栗坡县| 永平县| 南丹县| 周至县| 和政县| 同德县| 屯门区| 洛川县| 黄龙县| 河津市| 泾源县| 内丘县| 宣恩县| 怀化市| 西畴县| 三台县| 和龙市| 炎陵县| 辉县市| 清苑县| 莱阳市| 汝州市| 肥乡县|