国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - spring boot2.0實現優雅停機的方法

spring boot2.0實現優雅停機的方法

2021-04-25 13:19cm_zdRan Java教程

這篇文章主要介紹了spring boot2.0實現優雅停機的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

前期踩的坑 (spring boot 1.x)

1. 添加mavne依賴

?
1
2
3
4
5
<!-- springboot監控 -->
<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-actuator</artifactid>
</dependency>

2. 啟用shutdown

在配置文件里添加下面的配置

?
1
2
3
4
#啟用shutdown endpoint的http訪問
endpoints.shutdown.enabled=true
#不需要驗證
endpoints.shutdown.sensitive=false

啟動的時候可以看到下面的日志,就說明成功了

spring boot2.0實現優雅停機的方法

3. 優雅停機

發送post請求 http://localhost:8080/shutdown
如果響應碼是404 可以嘗試post http://localhost:8080/actuator/shutdown

spring boot 2.0

如果你使用的spring boot版本是2.x的就會發現,這些post請求都會出現404的結果。

下面是spring boot 2.0 優雅停機的實現方式。

1.修改application啟動類

tomcat容器

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
@springbootapplication
public class shutdownapplication {
 
  public static void main(string[] args) {
    springapplication.run(shutdownapplication.class, args);
  }
 
  /**
   * 用于接受 shutdown 事件
   */
  @bean
  public gracefulshutdown gracefulshutdown() {
    return new gracefulshutdown();
  }
 
  /**
   * 配置tomcat
   *
   * @return
   */
  @bean
  public servletwebserverfactory servletcontainer() {
    tomcatservletwebserverfactory tomcat = new tomcatservletwebserverfactory();
    tomcat.addconnectorcustomizers(gracefulshutdown());
    return tomcat;
  }
 
  /**
   * 優雅關閉 spring boot。容器必須是 tomcat
   */
  private class gracefulshutdown implements tomcatconnectorcustomizer, applicationlistener<contextclosedevent> {
    private final logger log = loggerfactory.getlogger(gracefulshutdown.class);
    private volatile connector connector;
    private final int waittime = 10;
 
    @override
    public void customize(connector connector) {
      this.connector = connector;
    }
 
    @override
    public void onapplicationevent(contextclosedevent contextclosedevent) {
      this.connector.pause();
      executor executor = this.connector.getprotocolhandler().getexecutor();
      if (executor instanceof threadpoolexecutor) {
        try {
          threadpoolexecutor threadpoolexecutor = (threadpoolexecutor) executor;
          threadpoolexecutor.shutdown();
          if (!threadpoolexecutor.awaittermination(waittime, timeunit.seconds)) {
            log.warn("tomcat 進程在" + waittime + " 秒內無法結束,嘗試強制結束");
          }
        } catch (interruptedexception ex) {
          thread.currentthread().interrupt();
        }
      }
    }
  }
}

undertow容器 (沒有使用過,不保證可用)

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
@springbootapplication
public class application {
  public static void main(string[] args) {
    springapplication.run(application.class, args);
  }
 
  /**
   * 優雅關閉 spring boot
   */
  @component
  public class gracefulshutdown implements applicationlistener<contextclosedevent> {
    @autowired
    private gracefulshutdownwrapper gracefulshutdownwrapper;
    @autowired
    private servletwebserverapplicationcontext context;
    @override
    public void onapplicationevent(contextclosedevent contextclosedevent){      gracefulshutdownwrapper.getgracefulshutdownhandler().shutdown();
      try {
        undertowservletwebserver webserver = (undertowservletwebserver)context.getwebserver();
        field field = webserver.getclass().getdeclaredfield("undertow");
        field.setaccessible(true);
        undertow undertow = (undertow) field.get(webserver);
        list<undertow.listenerinfo> listenerinfo = undertow.getlistenerinfo();
        undertow.listenerinfo listener = listenerinfo.get(0);
        connectorstatistics connectorstatistics = listener.getconnectorstatistics();
        while (connectorstatistics.getactiveconnections() > 0){}
      }catch (exception e){
        // application shutdown
      }
    }
  }
  @component
  public class gracefulshutdownwrapper implements handlerwrapper{
    private gracefulshutdownhandler gracefulshutdownhandler;
    @override
    public httphandler wrap(httphandler handler) {
      if(gracefulshutdownhandler == null) {
        this.gracefulshutdownhandler = new gracefulshutdownhandler(handler);
      }
      return gracefulshutdownhandler;
    }
    public gracefulshutdownhandler getgracefulshutdownhandler() {
      return gracefulshutdownhandler;
    }
 
  }
  @component
  @allargsconstructor
  public class undertowextraconfiguration {
    private final gracefulshutdownwrapper gracefulshutdownwrapper;
 
    @bean
    public undertowservletwebserverfactory servletwebserverfactory() {
      undertowservletwebserverfactory factory = new undertowservletwebserverfactory();
      factory.adddeploymentinfocustomizers(deploymentinfo -> deploymentinfo.addouterhandlerchainwrapper(gracefulshutdownwrapper));
      factory.addbuildercustomizers(builder -> builder.setserveroption(undertowoptions.enable_statistics, true));
      return factory;
    }
  }
}

2. 使用 kill命令殺死進程

使用下面的命令殺死進程。該命令是向 某個進程發送終止信號。

?
1
kill -15 [pid]

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:https://blog.csdn.net/u013451048/article/details/80194001

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 久久人人爽爽爽人久久久 | 国产精品亚洲精品 | 中文字幕一区二区三区乱码图片 | 国产视频精品免费 | 性色视频在线 | 99在线播放 | 黑森林av凹凸导航 | 免费观看www免费观看 | 国产日韩精品在线观看 | 久久久在线免费观看 | 性免费网站 | 久久九九国产 | 亚洲xxxx3d| www中文字幕| h片观看 | 九九香蕉视频 | 亚洲一卡二卡 | 亚洲综合一二区 | 寡妇性视频免费高清播放器 | 国产精品日本 | 羞羞视频在线免费 | 亚洲精品字幕 | 国产一区二区av | 亚洲欧美在线一区 | 中文字幕精品一区二区精品 | 日本一区二区三区免费观看 | 91久久精品一区二区二区 | 成人在线观看网 | 这里只有精品视频在线 | baoyu123成人免费看视频 | 国产精品美女 | 免费成人在线电影 | 久操成人| 精品国产一区二区三区在线观看 | www.操.com| 国产一区精品电影 | 精品久久久久久久久久久 | 91视频精品 | 日韩视频一区二区 | 99热首页| 日日夜夜精品免费视频 |