1. 前言

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

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

2. Spring Boot 应用的进程

jpsJava 自带的查看 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

你知道如何自动保存 Spring Boot 应用进程号吗的更多相关文章

  1. Jenkins自动部署spring boot

    Jenkins自动部署spring boot 背景介绍 本公司属于微小型企业,初期业务量不高,所有程序都写在一个maven项目里面,不过是多模块开发. 分了login模块,service模块,cms模 ...

  2. java代码自动下载Spring Boot用户手册

    本示例演示Spring Boot 1.5.9.RELEASE版本的用户手册下载 pom.xml <?xml version="1.0" encoding="UTF- ...

  3. Jenkins 自动发布 Spring Boot 项目(Gitee)

    1.下载 wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war,并部署到tomcat下 2.机器安装好 java ,maven ,g ...

  4. 自定义的Spring Boot starter如何设置自动配置注解

    本文首发于个人网站: 在Spring Boot实战之定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法: spring.factories:由Spring Boot触 ...

  5. Spring Boot学习一之配置类及自动配置

    一.配置类 1. 导入其他配置类 你不需要将所有的 @Configuration 放进一个单独的类, @Import 注解可以用来导入其他配置类.另外,你也可以使用 @ComponentScan 注解 ...

  6. Spring Boot自动配置如何工作

    通过使用Mongo和MySQL DB实现的示例,深入了解Spring Boot的@Conditional注释世界. 在我以前的文章“为什么选择Spring Boot?”中,我们讨论了如何创建Sprin ...

  7. Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件

    本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...

  8. Spring Boot的自动配置

    Spring Boot的自动配置 --摘自https://www.hollischuang.com/archives/1791 随着Ruby.Groovy等动态语言的流行,相比较之下Java的开发显得 ...

  9. Spring Boot的自动配置原理及启动流程源码分析

    概述 Spring Boot 应用目前应该是 Java 中用得最多的框架了吧.其中 Spring Boot 最具特点之一就是自动配置,基于Spring Boot 的自动配置,我们可以很快集成某个模块, ...

随机推荐

  1. [树的度数] Christmas Spruce

    Consider a rooted tree. A rooted tree has one special vertex called the root. All edges are directed ...

  2. 蓝桥杯——一步之遥,扩展gcd的应用

    1. 一步之遥 [问题描述]从昏迷中醒来,小明发现自己被关在X星球的废矿车里.矿车停在平直的废弃的轨道上.他的面前是两个按钮,分别写着“F”和“B”. 小明突然记起来,这两个按钮可以控制矿车在轨道上前 ...

  3. OLED的使用-4线SPI驱动

    一 .OLED屏 1.OLED屏(七针) 2.OLED电路图 3.0.96'OLED简介 该模块特点: 1.三色可选,模块有两种单色和黄蓝双色两种颜色可选,单色为纯白色和纯蓝色,双 色为黄蓝双色: 2 ...

  4. linux pdftk

    部分内容来源网络,如有版权问题,请联系删除: http://xuqin.blog.51cto.com/5183168/1117780,   http://blog.sina.com.cn/s/blog ...

  5. Java基础语法(8)-数组中的常见排序算法

    title: Java基础语法(8)-数组中的常见排序算法 blog: CSDN data: Java学习路线及视频 1.基本概念 排序: 是计算机程序设计中的一项重要操作,其功能是指一个数据元素集合 ...

  6. mongodb_2

    一.游标 在mongodb中,底层使用js引擎进行各种操作,所以我们在命令行窗口,可直接执行js代码. #使用for循环,插入1000条数据. > for (var i=0;i<1000; ...

  7. JavaScript DOM 事件模型

    JavaScript DOM 事件模型 JavaScript 是基于面向对象和事件驱动的一门语言,事件模型是 DOM 中至关重要的内容,理解事件驱动机制.事件反馈.事件冒泡.事件捕获以及事件委托能帮助 ...

  8. php源码的编译

    本片文章主要介绍windows下的php源码的编译. 1.1 编译环境 软件 环境 操作系统 Windows 7 专业版 32bit Visual studio 2012 专业版 PHP 5.5.2. ...

  9. Blazor入门笔记(4)-组件的生命周期

    1.环境 VS2019 16.5.1.NET Core SDK 3.1.200Blazor WebAssembly Templates 3.2.0-preview2.20160.5 2.简介 Blaz ...

  10. JLabel有点感觉了,码上

    Java中Label的姿势 Jabel与JDialog窗口的是否可见可做为弹窗. 设置字体颜色 jl.setForeground(Color.ORANGE);//设置字体颜色 设置字体与大小 jl.s ...