1. 前言

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

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获取更多资讯

java程序退出自动保存_你知道如何自动保存 Spring Boot 应用进程号吗相关推荐

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

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 欢迎阅读 Spring Boot 2 实战 ...

  2. sm4 前后端 加密_这7个开源的Spring Boot前后端分离项目整理给你

    来源|公众号:江南一点雨 前后端分离已经开始逐渐走进各公司的技术栈,不少公司都已经切换到前后端分离开发技术栈上面了,因此建议技术人学习前后端分离开发以提升自身优势.同时,也整理了 7 个开源的 Spr ...

  3. java程序运行内存分配不足_解决Tomcat运行内存不足问题

    在使用Java程序从数据库中查询大量的数据或是应用服务器(如tomcat.jboss,weblogic)加载jar包时会出现java.lang.OutOfMemoryError异常.这主要是由于应用服 ...

  4. java程序中语句隔开_《Java语言程序设计》填空题.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava <Java语言程序设计>填空题.doc9页 ...

  5. 所有java程序都有线程_若所有的用户线程都终止了,Java程序就会结束。( )_学小易找答案...

    [单选题]关于链表结构,陈述错误的是 . [单选题]下列关于构造方法的特点的描述中,错误的是 . [判断题]在构造方法中如调用 super() 语句,则必须使其成为构造方法中的第一条语句. [单选题] ...

  6. java程序运行5步骤_浅析Java程序的执行过程

    一 .jdk内容概述 当安装好jdk后(本示例jdk版本为11.0.1,不同版本,目录有细微差别,但bin目录包含的exe是一样的),打开bin目录,有两个重要的exe文件:javac.exe(编译器 ...

  7. 该页面仅以HTML格式保存_轻松实现页面自动刷新功能,提高前端开发效率

    作为一名前端,开发web页面是我们的本职工作.在完成一个页面开发的过程中,保存代码然后手动刷新页面查看效果,这样的动作需要重复无数次,虽然一次这样的动作可能只要花费几秒钟的时间,但是次数多了也挺浪费时 ...

  8. finally在java程序中的作用_深入理解Java中的finally

    问题 在Java的异常体系中,我们经常会使用finally语句块来保证进行一些无论有无异常都要执行的处理流程,但finally语句块与return语句究竟哪个先执行总是让人迷惑.根据书本介绍,似乎是f ...

  9. 如何重启java程序jar包_windows下jar包开机自动重启的步骤

    最近做了很多项目,不同的系统,不同的部署方式,这里做个记录 1.在jar包目录新建一个start.bat  文件,然后写入启动命令 jar -jar XXXX.jar 2.仍然在此目录,新建start ...

最新文章

  1. 《评人工智能如何走向新阶段》后记(再续27)
  2. 开发中 常用 js 记录(一)
  3. 用commons-fileupload-1.2 实现文件上传
  4. Android之调用微信登陆、分享、支付
  5. 开发者最容易犯的13个JavaScript错误
  6. winform button设计(一)
  7. server sql 中类型为bit应该插入什么值_关于SQL Server中bit类型字段增删查改的一些事...
  8. 我是如何从蛋壳的虎口里维权的?
  9. 南京江北新区科创园非常漂亮
  10. NLP任务增强:通过引入外部知识库来提供额外信息
  11. python自然语言处理学习笔记二
  12. C-V2X仿真测试之虚拟场景设计
  13. 程序员月薪5W却发出哀叹:家庭枷锁太重,生活如同围城
  14. persistence.cpp:2197:ann.xml(1): There should be space between attributes in function icvXMLParseTag
  15. 中文数字转换成阿拉伯数字(一千二百三十四万五千六百七十八-->12345678)
  16. 对于Jenkins和gitlab连接的注意事项
  17. 武汉:“大象转身”,“中国车都”变“中国车谷”的二段跨越
  18. 搭建本地Spring Initializr服务(2020/4/17)
  19. 串口DCB结构详细说明
  20. 最常见DDOS攻击工具有哪些?怎么防御DDOS攻击?

热门文章

  1. multipartfile 获取音频时长_QQ音乐移动端加入倍速播放,蓄力长音频发展 | 产品观察...
  2. 如何给影像添加投影_地面互动投影是如何实现的,需要哪些设备?
  3. java中面向对象_java中的面向对象
  4. HDC2020开发者大会鸿蒙,华为开发者大会HDC 2020将于9月10日开启 鸿蒙OS 2.0亮相
  5. 同级中断可以嵌套吗_这可能是最通俗易懂的方式讲解ARM中断原理以及中断嵌套...
  6. 2021的行情下如何能够赚到自己认知范围内的钱?一些投资需要补充的内容
  7. c#连mysql的latin1编码乱码问题
  8. nVelocity使用简介
  9. leetcode 198 python
  10. python实现带头结点的单链表的就地逆置_6-1 带头结点的单链表就地逆置 (10 分)...