如何自动保存 Spring Boot 应用进程号?_Spring Boot

1. 前言

欢迎阅读 Spring Boot 2 实战 系列文章[1]PID 对于系统运维来说并不陌生,但是对于一些开发者特别是新手还是要简单介绍一下的。它是 Process ID 的简称,是系统分配给一个进程的唯一标识符,是各进程的身份标识符,程序一运行系统就会自动分配给进程一个独一无二的 PID。进程终止后,PID 被系统回收,可能会被继续给新运行的程序。俗称 进程号 。PID 是我们进行系统进程管理的重要参数,是重要的运维标识。例如我们常用的 kill -9 <pid> 。

2. Spring Boot 应用的进程

jps 是 Java 自带的查看 Java 进程的命令,通过这个命令可以查看当前系统所有运行中的 Java 进程、Java包名、jar 包名及 JVM 参数等。详细请参考相关 官方文档[2]。通常我们会用 jps 来查 Java 应用的进程号。Spring Boot 应用 作为 Java 应用启动后自然有一个 PID 进程号。通常我们在启动后会在 log 中看到它:

   .   ____          _            __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.0.RELEASE)

2019-11-20 14:28:00.925 INFO 7828 --- [ main] c.f.s.s.SecurityLearningApplication : Starting SecurityLearningApplication on DESKTOP-L0IOI2S with PID 7828

当使用多个 Spring Boot 应用程序时,很难识别 Spring Boot 应用程序 PID,持久化后的 PID 更加方便我们来管理 Spring Boot 应用。

3. Spring Boot 应用 PID 写入文件

Spring Boot 提供了在应用程序启动时将应用程序 PID 写入文件的方法,具体的功能由 ApplicationPidFileWriter 完成 。大致逻辑为:在应用启动时监听启动事件,将 PID 写入指定的文件,默认为 application.pid ;默认路径为当前路径。如果写入文件失败,将会将 PID 值 写入系统环境变量属性 PID_FAIL_ON_WRITE_ERROR (不区分大小写),或者写入 Spring 环境变量属性 spring.pid.fail-on-write-error 。

3.1 配置 Spring Boot PID 持久化功能

默认情况下 ApplicationPidFileWriter 并没有自动配置,需要我们自行配置。我们可以在 Spring Boot 入口类中按照下面的模板进行配置注册监听器 ApplicationPidFileWriter:

package cn.felord.spring.security;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.ApplicationPidFileWriter;
import org.springframework.cache.annotation.EnableCaching;

/**
* @author Felordcn
*/
@SpringBootApplication
public class SecurityLearningApplication {

public static void main(String[] args) {

SpringApplication springApplication = new SpringApplication(SecurityLearningApplication.class);
springApplication.addListeners(new ApplicationPidFileWriter());
springApplication.run(args);
}

}

做了上述配置后,启动就会生成 application.pid 文件,里面就会有 PID 。有时候可能你要定制文件的名称和路径。你可以通过 Spring Boot 的配置属性 spring.pid.file 来定制:

 spring:
pid:
# 将 PID 写入 /var/run 路径下的 myApp.pid 文件中
file: /var/run/myApp.pid

重新启动,会在 /var/run 下找到 myApp.pid 。

4. 总结

今天我们对如何持久化 Spring Boot PID 进行了讲解。通过编程式的配置,你可以将 Spring Boot 应用的 PID 持久化到文件中,并且你可以根据需求定制 PID 的存储文件。今天就到这里,如果觉得不错,请点个赞和转发支持一下吧。

如何自动保存 Spring Boot 应用进程号?_Spring Boot_02

本文通过OpenWrite的Markdown转换工具发布

如何自动保存 Spring Boot 应用进程号?_Spring Boot_03