停止 Spring Boot 应用程序期间未找到 JMX bean(fork 为空)

问题描述 投票:0回答:1

我有以下脚本

#!/bin/bash
cd ../../../configuration-service
mvn -e -X spring-boot:stop &>log.log &

用于停止 SpringBoot 应用程序,这是整个应用程序(单个 java 文件)

@EnableConfigServer
@SpringBootApplication
public class ConfigurationServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigurationServiceApplication.class, args);
    }
}

并且脚本失败并出现以下错误:

[ERROR] Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.4.2:stop (default-cli) on project configuration-service: Spring application lifecycle JMX bean not found (fork is null). Could not stop application gracefully: org.springframework.boot:type=Admin,name=SpringApplication -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.springframework.boot:spring-boot-maven-plugin:2.4.2:stop (default-cli) on project configuration-service: Spring application lifecycle JMX bean not found (fork is null). Could not stop application gracefully

完整日志在这里: https://gist.githubusercontent.com/iva-nova-e-katerina/45c62a1ac941c0d618a18dc42f980a51/raw/4be33b d4212f7ea0bfbad061e861dbcba988e4c9/mvn%2520-e%2520-X%2520spring-boot:stop%2520&%253Elog.log%2520&

请告诉我如何停止这个 Spring Boot 应用程序。我需要从另一个 Spring Boot 应用程序(从另一个微服务)终止此服务

我已经尝试过

mvn -e -X spring-boot:stop &>log.log &
期待 SpringBoot 应用程序优雅停止

spring-boot maven microservices jmx
1个回答
0
投票

我最近在遗留应用程序的 CI/CD 管道中遇到了类似的问题。

您使用的是哪个版本的 Spring Boot?此解决方案适用于3.0.0以下版本。

根本原因是

spring-boot-maven-plugin:2.7.18

fork
目标之间的
spring-boot:start
参数不匹配:

    spring-boot:stop
  • 目标使用默认值
    start
    (请参阅:
    插件的官方文档
  • true
  • 目标无法从上下文中读取此值,并且默认为
    stop
    
    
  • 在命令行中运行的快速修复方法是将
null

参数添加到命令中:

-Dspring-boot.stop.fork=true

根据您的 pom.xml 以及您使用插件的方式,您还可以考虑将 
mvn -e -X spring-boot:stop -Dspring-boot.stop.fork=true &>log.log &

添加到您的插件配置中,以便在执行目标之间保持一致,例如:

<fork>true</fork>

另请参阅此 GitHub 问题:
spring-boot:stop 的默认 fork 值不一致

© www.soinside.com 2019 - 2024. All rights reserved.