你知道如何自动保存 Spring Boot 应用进程号吗
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 获取更多资讯
你知道如何自动保存 Spring Boot 应用进程号吗的更多相关文章
- Jenkins自动部署spring boot
Jenkins自动部署spring boot 背景介绍 本公司属于微小型企业,初期业务量不高,所有程序都写在一个maven项目里面,不过是多模块开发. 分了login模块,service模块,cms模 ...
- java代码自动下载Spring Boot用户手册
本示例演示Spring Boot 1.5.9.RELEASE版本的用户手册下载 pom.xml <?xml version="1.0" encoding="UTF- ...
- Jenkins 自动发布 Spring Boot 项目(Gitee)
1.下载 wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war,并部署到tomcat下 2.机器安装好 java ,maven ,g ...
- 自定义的Spring Boot starter如何设置自动配置注解
本文首发于个人网站: 在Spring Boot实战之定制自己的starter一文最后提到,触发Spring Boot的配置过程有两种方法: spring.factories:由Spring Boot触 ...
- Spring Boot学习一之配置类及自动配置
一.配置类 1. 导入其他配置类 你不需要将所有的 @Configuration 放进一个单独的类, @Import 注解可以用来导入其他配置类.另外,你也可以使用 @ComponentScan 注解 ...
- Spring Boot自动配置如何工作
通过使用Mongo和MySQL DB实现的示例,深入了解Spring Boot的@Conditional注释世界. 在我以前的文章“为什么选择Spring Boot?”中,我们讨论了如何创建Sprin ...
- Spring Boot 自动配置的原理、核心注解以及利用自动配置实现了自定义 Starter 组件
本章内容 自定义属性快速入门 外化配置 自动配置 自定义创建 Starter 组件 摘录:读书是读完这些文字还要好好用心去想想,写书也一样,做任何事也一样 图 2 第二章目录结构图 第 2 章 Spr ...
- Spring Boot的自动配置
Spring Boot的自动配置 --摘自https://www.hollischuang.com/archives/1791 随着Ruby.Groovy等动态语言的流行,相比较之下Java的开发显得 ...
- Spring Boot的自动配置原理及启动流程源码分析
概述 Spring Boot 应用目前应该是 Java 中用得最多的框架了吧.其中 Spring Boot 最具特点之一就是自动配置,基于Spring Boot 的自动配置,我们可以很快集成某个模块, ...
随机推荐
- python爬取网站页面时,部分标签无指定属性而报错
在写爬取页面a标签下href属性的时候,有这样一个问题,如果a标签下没有href这个属性则会报错,如下: 百度了有师傅用正则匹配的,方法感觉都不怎么好,查了BeautifulSoup的官方文档,发现一 ...
- 五、运算符的补充与if语句
1.可变不可变类型 指:对前面所学类型做一个可变和不可变类型的分类 可变类型:值改变,ID不变,证明改的是原值,原值是可以被改变的 不可变类型:值改变,ID也变了,证明是产生新的值,压根没有改变原值, ...
- OpenCV-Python 直方图-1:查找、绘制和分析 | 二十六
目标 学会 使用OpenCV和Numpy函数查找直方图 使用OpenCV和Matplotlib函数绘制直方图 你将看到以下函数:cv.calcHist(),np.histogram()等. 理论 那么 ...
- coding++:解决Not allowed to load local resource错误-SpringBoot配置虚拟路径
1.在SpringBoot里上传图片后返回了绝对路径,发现本地读取的环节上面出现了错误(Not allowed to load local resource),一开始用的是直接本地路径. 但是在页面上 ...
- 17.用cmd创建maven web工程
1.跳转到需要创建maven工程的目录,输入 mvn archetype:generate 2.找到webapp的那一项,输入它的序号(这里是10) 3.输入groupId,artifactId,ve ...
- 3.用IntelliJ IDEA 创建Maven
一.File→New→ Project (需要下载安装配置Maven等,这些步骤省略) 二.Maven→org.apache.maven.archetypes:maven-archetype-quic ...
- 2.1.JVM的垃圾回收机制,判断对象是否死亡
因为热爱,所以坚持. 文章下方有本文参考电子书和视频的下载地址哦~ 这节我们主要讲垃圾收集的一些基本概念,先了解垃圾收集是什么.然后触发条件是什么.最后虚拟机如何判断对象是否死亡. 一.前言 我们 ...
- Django-FileField与ImageField
1: 在views中用户表添加:class userinfo: avatar = models.FileField(upload_to='avatars/', default="/avata ...
- D - 淡黄的长裙 HDU - 4221(贪心)
D - 淡黄的长裙 HDU - 4221(贪心) James is almost mad! Currently, he was assigned a lot of works to do, so ma ...
- Asp.Net.Core WebApi 版本控制
前言 在后端Api的开发过程中,无法避免的会遇到接口迭代的过程,如何保证新老接口的共存和接口的向前的兼容呢,这时候就需要对Api进行版本的控制,那如何优雅的控制Api的版本呢? 开始 Microsof ...