我想使用执行器端点关闭我的spring boot应用程序(spring boot v2)。 我已经使用spring-actuator成功启用了关闭端点(请参阅application.yml)。 我还可以调用端点,然后spring关闭应用程序上下文(请参阅logs和curl命令)。

但是以某种方式,Java进程并没有被杀死。 我还尝试将应用程序打包到docker容器中,以确保它不是Java的本地安装问题。 但没有成功-Java进程仍在运行。

该应用程序以H2数据库和用于Elasticsearch的Spring-Data-Jest的开发模式启动。

application.yml

management:
    security:
        roles: ADMIN
    endpoints:
        web:
            base-path: /management
            exposure:
                include: ["configprops", "env", "health", "info", "threaddump", "logfile", "shutdown" ]
    endpoint:
        health:
            show-details: when_authorized
        shutdown:
            enabled: true
    info:
        git:
            mode: full
    health:
        mail:
            enabled: false # When using the MailService, configure an SMTP server and set this to true
    metrics:
        enabled: false # http://micrometer.io/ is disabled by default, as we use http://metrics.dropwizard.io/ instead

spring:
    autoconfigure:
        exclude: org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchAutoConfiguration,org.springframework.boot.autoconfigure.data.elasticsearch.ElasticsearchDataAutoConfiguration
    application:
        name: AnyWEB
    profiles:
        # The commented value for `active` can be replaced with valid Spring profiles to load.
        # Otherwise, it will be filled in by gradle when building the WAR file
        # Either way, it can be overridden by `--spring.profiles.active` value passed in the commandline or `-Dspring.profiles.active` set in `JAVA_OPTS`
        active: #spring.profiles.active#
    jpa:
        open-in-view: false
        hibernate:
            ddl-auto: none
            naming:
                physical-strategy: org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
                implicit-strategy: org.springframework.boot.orm.jpa.hibernate.SpringImplicitNamingStrategy
    messages:
        basename: i18n/messages
    mvc:
        favicon:
            enabled: false
    thymeleaf:
        mode: HTML

server:
    servlet:
        session:
            cookie:
                http-only: true

info:
    # Comma separated list of profiles that will trigger the ribbon to show
    display-ribbon-on-profiles: "dev"

jhipster:
    async:
        core-pool-size: 2
        max-pool-size: 50
        queue-capacity: 10000
    # By default CORS is disabled. Uncomment to enable.
    #cors:
        #allowed-origins: "*"
        #allowed-methods: "*"
        #allowed-headers: "*"
        #exposed-headers: "Authorization,Link,X-Total-Count"
        #allow-credentials: true
        #max-age: 1800
    mail:
        from: AnyWEB@localhost
    swagger:
        default-include-pattern: /api/.*
        title: AnyWEB API
        description: AnyWEB API documentation
        version: 0.0.1
        terms-of-service-url:
        contact-name:
        contact-url:
        contact-email:
        license:
        license-url:

logging:
    file: build/AnyWEB.log

CURL关闭端点

curl --header "Authorization: Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJhZG1pbiIsImF1dGgiOiJST0xFX0FETUlOLFJPTEVfVVNFUiIsImV4cCI6MTUzOTQzNTk0OX0.tlu88esl-PYzdZvdEnlaJJB2Niy4p2AOtHqL5O7tr1C2LDottIZJtZGAi2WLTW9VYKUScY-eDi3P7TxhndS6CA" -X POST 192.168.99.100:8080/management/shutdown
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    35    0    35    0     0     66      0 --:--:-- --:--:-- --:--:--    66{"message":"Shutting down, bye..."}

关闭时的日志: 在此处输入图片说明

这是调用执行器关闭端点后的完整线程转储

Full thread dump

                "XNIO-1 Accept@7046" daemon prio=5 tid=0x17 nid=NA runnable
                  java.lang.Thread.State: RUNNABLE
                      at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(WindowsSelectorImpl.java:-1)
                      at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
                      at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
                      at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
                      at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
                      - locked  (a sun.nio.ch.WindowsSelectorImpl)
                      - locked  (a java.util.Collections$UnmodifiableSet)
                      - locked  (a sun.nio.ch.Util$2)
                      at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
                      at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
                      at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)

                "XNIO-1 I/O-1@7045" daemon prio=5 tid=0x16 nid=NA runnable
                  java.lang.Thread.State: RUNNABLE
                      at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll0(WindowsSelectorImpl.java:-1)
                      at sun.nio.ch.WindowsSelectorImpl$SubSelector.poll(WindowsSelectorImpl.java:296)
                      at sun.nio.ch.WindowsSelectorImpl$SubSelector.access$400(WindowsSelectorImpl.java:278)
                      at sun.nio.ch.WindowsSelectorImpl.doSelect(WindowsSelectorImpl.java:159)
                      at sun.nio.ch.SelectorImpl.lockAndDoSelect(SelectorImpl.java:86)
                      - locked  (a sun.nio.ch.WindowsSelectorImpl)
                      - locked  (a java.util.Collections$UnmodifiableSet)
                      - locked  (a sun.nio.ch.Util$2)
                      at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:97)
                      at sun.nio.ch.SelectorImpl.select(SelectorImpl.java:101)
                      at org.xnio.nio.WorkerThread.run(WorkerThread.java:511)

                "pool-4-thread-1@19750" prio=5 tid=0x3b nid=NA waiting
                  java.lang.Thread.State: WAITING
                      at sun.misc.Unsafe.park(Unsafe.java:-1)
                      at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:215)
                      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2078)
                      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:1093)
                      at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:809)
                      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
                      at java.lang.Thread.run(Thread.java:745)

                "Abandoned connection cleanup thread@6449" daemon prio=5 tid=0x15 nid=NA waiting
                  java.lang.Thread.State: WAITING
                      at sun.misc.Unsafe.park(Unsafe.java:-1)
                      at java.util.concurrent.locks.LockSupport.park(LockSupport.java:175)
                      at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2039)
                      at java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:442)
                      at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:1067)
                      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1127)
                      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
                      at java.lang.Thread.run(Thread.java:745)

                "MVStore background writer nio:C:/Users/Simon/git/lisaweb/build/h2db/db/lisaweb.mv.db@7366" daemon prio=5 tid=0x19 nid=NA waiting
                  java.lang.Thread.State: WAITING
                      at java.lang.Object.wait(Object.java:-1)
                      at org.h2.mvstore.MVStore$BackgroundWriterThread.run(MVStore.java:2708)

                "Finalizer@19938" daemon prio=8 tid=0x3 nid=NA waiting
                  java.lang.Thread.State: WAITING
                      at java.lang.Object.wait(Object.java:-1)
                      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:143)
                      at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:164)
                      at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:209)

                "Reference Handler@19939" daemon prio=10 tid=0x2 nid=NA waiting
                  java.lang.Thread.State: WAITING
                      at java.lang.Object.wait(Object.java:-1)
                      at java.lang.Object.wait(Object.java:502)
                      at java.lang.ref.Reference.tryHandlePending(Reference.java:191)
                      at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:153)

                "DestroyJavaVM@19830" prio=5 tid=0x42 nid=NA runnable
                  java.lang.Thread.State: RUNNABLE

                "Attach Listener@19936" daemon prio=5 tid=0x5 nid=NA runnable
                  java.lang.Thread.State: RUNNABLE

                "Signal Dispatcher@19937" daemon prio=9 tid=0x4 nid=NA runnable
                  java.lang.Thread.State: RUNNABLE

更新:我已经在docker中运行了带有mysql + elasticsearch的生产环境。 我使用生产配置文件启动了该应用程序,但仍然存在相同的问题。 所以我想这与局部h2和局部内存jest elasticsearch实例无关。

任何帮助将不胜感激-谢谢

  ask by SimonH translate from so

本文未有回复,本站智能推荐:

2回复

弹簧启动执行器端点覆盖

我一直在使用Spring启动进行原型设计,其中我添加了对spring-boot-starter-actuator和spring-boot-starter-data-rest ,并将我的测试REST端点命名为/info 。 应用程序运行没有任何错误,但我的端点无法被调用,应用程序一直返回404。
2回复

弹簧启动执行器关闭不会终止无限循环

在我的Spring Boot应用程序中,我有一个组件,该组件的方法可以在下面的无限循环中运行某些工作,实际上它会检查db中的一些数据: 这是我的Spring Boot应用程序的应用入口点: 并且启用了执行器的关闭端点,因此我可以通过以下命令curl -X POST localhost:8
1回复

无法使用弹簧执行器-创建beanCacheMetricsRegistrarConfiguration时出错

最近,我添加了对org.springframework.boot:spring-boot-starter-actuator依赖,因为我想监视我的应用程序状态(如UP等),但是在应用程序启动时,我遇到了此异常。 我正在使用这个SpringBootApplication标头: 有人可以帮我吗
1回复

测试期间弹簧靴的执行器端点不可用

我有一个Web应用程序,其中包含在上下文路径/管理下公开的执行程序,并且仅通过Spring安全集成向具有角色“ 管理员 ”的用户提供。 实际上,该应用程序确实按预期工作。 但是,我正在努力测试Web应用程序,即使用spring boot的设施编写集成测试。 运行下面的测试,加载弹簧上下文
1回复

为什么其他端点不暴露弹簧启动执行器中的信息和健康状况

我有一个 spring-mvc 应用程序,我正在尝试为性能指标和其他端点添加 spring boot 执行器。 除了信息和健康端点之外,我没有获得指标、bean 端点。 任何人都可以帮助我在我错过配置以获得这些端点的地方吗? Spring 版本:5.2.8.RELEASE Spring Boot
3回复

弹簧启动执行器-MAX属性

我正在使用Spring Boot Actuator依赖项来获取应用程序的见解。 为此,我使用了Spring Boot Admin。 客户端服务器的配置工作正常。 我必须测量要执行的端点的计数,总时间,最大值。 为什么MAX(时间)为0而TOTAL_TIME:为Xms 当我执行概
1回复

带有弹簧罩1.5.4的弹簧罩执行器

我将弹簧靴升级到1.5.4,还使用执行器进行健康检查。 构建成功,但是当我运行应用程序时,出现以下错误: 以下是与spring相关的所有Maven依赖关系: 不同软件包的版本: 我已经验证,并且执行器类引用的是Spring Boot的1.5.4版本,我的应用程序中没有其他版本的sp
2回复

使用java函数从Springboot调用Spring执行器/restart端点

我希望重新启动 Spring Boot 应用程序,因此使用 Spring Actuator /restart 端点正在使用 curl 工作,但我希望使用应用程序内部的 java 代码调用相同的函数,我已经尝试过此代码,但它是不工作: