你知道如何自动保存 Spring Boot 应用进程号吗_pid

1. 前言

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

​PID​​ 是我们进行系统进程管理的重要参数,是重要的运维标识。例如我们常用的 ​​kill -9 <pid>​​ 。

2. Spring Boot 应用的进程

​jps​​ 是 ​Java​ 自带的查看 ​Java​ 进程的命令,通过这个命令可以查看当前系统所有运行中的 ​Java​ 进程、​Java​包名、​jar​ 包名及 ​JVM​ 参数等。详细请参考相关 ​​官方文档​​。通常我们会用 ​​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​​ 的存储文件。今天就到这里,如果觉得不错,请点个赞和转发支持一下吧。

​关注公众号:Felordcn获取更多资讯​

​个人博客:https://felord.cn​