Spring Boot 教程

ExitCodeGenerator 接口

ExitCodeGenerator 接口用于从 SpringApplication 运行的命令行生成“退出代码”。

Spring Boot 为确保 ApplicationContext 在退出时优雅的关闭,每个 SpringApplication 都会注册一个 JVM 的 shutdown 钩子,所有标准的 Spring 生命周期回调都能使用。比如:DisposableBean 接口或 @PreDestroy 注解。

此外,如果想在 Spring Boot 应用结束时返回特定的退出码(exit code),我们自己的 beans 可以实现 org.springframework.boot.ExitCodeGenerator 接口。

示例代码

(1)实现 ExitCodeGenerator 接口,生成自己的退出代码。代码如下:

import org.springframework.boot.ExitCodeGenerator;
import org.springframework.stereotype.Component;

@Component
public class MyExitCodeGenerator implements ExitCodeGenerator {

    @Override
    public int getExitCode() {
        System.out.println("========= MyExitCodeGenerator =========");
        return 100;
    }

}

上面自定义的 ExitCodeGenerator 通过 @Component 注解注入到 Spring 容器。

(2)测试代码。如果你使用 IDEA 运行 Spring Boot,直接点击 IDEA 的关闭按钮停止 Spring Boot 是不会触发自定义的 ExitCodeGenerator。因此,我们需要使用 ConfigurableApplicationContext 类的 close() 方法去停止 Spring Boot。代码如下:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;

@RestController
@SpringBootApplication
public class AppArgDemo3 {
    private static ConfigurableApplicationContext context;

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

    @RequestMapping("/exit")
    public void exit(){
        if(null != context) {
            context.close();
            System.out.println("Spring Boot exit success.");
        } else {
            System.out.println("ConfigurableApplicationContext is null");
        }
    }

}

上面代码中,在 exit() 方法中调用了 ConfigurableApplicationContext  的 close() 方法去关闭 Spring Boot 应用。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号