我注意到Spring boot在启动过程中在日志中打印了进程ID。现在我想编写一个脚本来使用此pid终止此进程并再次启动应用程序。 Spring Boot是否提供任何api来获取此pid?谢谢!
答案 0 :(得分:16)
Spring Boot提供类ApplicationPidFileWriter
,然后将PID写入文件。您可以通过将其添加为SpringApplication的监听器来激活它:
SpringApplication springApplication = new SpringApplication(DemoApplication.class);
springApplication.addListeners(new ApplicationPidFileWriter());
springApplication.run(args);
ApplicationPidFileWriter
的构造函数也可以使用自定义文件名的String或File
对象。然后,您可以从该文件中读取PID并在脚本中使用它。
答案 1 :(得分:0)
您可以执行tasklist命令列出活动进程,并显示其标识符(PID)。
您也可以将它们写入脚本中的文件:
tasklist /v txt > filename.txt
之后,您可以使用该脚本读取文件并获取pid。
最终你会使用该脚本来终止进程。
答案 2 :(得分:0)
来自Part V. Spring Boot Actuator: Production-ready features documentation:
在spring-boot模块中,您可以找到两个类来创建文件 通常对过程监控有用:
- ApplicationPidFileWriter创建一个包含应用程序PID的文件 (默认情况下,在文件名为 application.pid)。
- WebServerPortFileWriter创建一个文件(或多个文件) 包含正在运行的Web服务器的端口(默认情况下, 应用程序目录,文件名为application.port)。
默认情况下,不会激活这些编写器,但是您可以启用:
- 通过扩展配置
- 第60.2节“以编程方式”
这是60.1扩展配置:
在META-INF / spring.factories文件中,您可以激活 编写PID文件的侦听器,如以下示例所示:
org.springframework.context.ApplicationListener=\
org.springframework.boot.context.ApplicationPidFileWriter,\
org.springframework.boot.web.context.WebServerPortFileWriter
这将在启动时同时启用pid和端口输出。
因此,想法很简单:在spring boot应用程序的src/main/resources/META-INF
文件夹中(如果不存在),创建一个具有先前内容的spring.factories
文件,以同时启用(pid或port)或启用以下仅启用PID输出:
org.springframework.context.ApplicationListener=org.springframework.boot.context.ApplicationPidFileWriter
答案 3 :(得分:0)
只需转到/ var / run / {您的应用程序名称} /,读取.pid文件中的pid。
答案 4 :(得分:0)
使用 ApplicationPidFileWriter 是@dunni 已经提到的一种方式。
另一种方法是使用弹簧靴执行器。 actuator/env 将以 json 格式返回所有环境详细信息,例如 port#、PID# 和许多其他系统属性。
http://hostName:port#/actuator/env
要使用这个必须首先在他的应用程序中启用和公开执行器。 步骤:
答案 5 :(得分:0)