스프링 부트 PID(Process Identifier) 파일 생성 방법

왜?

스프링 부트 애플리케이션을 백그라운드 프로세스로 실행했다면 프로세스를 종료할 때 PID(Process Identifier)를 알아야 한다. 쉽게는 ps -ef|grep java 와 같은 명령어로 직접 PID를 확인하여 kill 명령어로 프로세스를 종료할 수 있지만 스프링 부트 애플리케이션의 재시작 자동화를 위해서는 다른 방법이 필요했다.

그래서 PID가 적혀있는 파일이 필요하고 스프링 부트에서는 PID 파일을 생성하도록 간단하게 설정할 수 있다.

어떻게?

application.yml에 아래와 같이 PID 파일 생성 경로를 지정한다.

1
2
3
spring:
pid:
file: /home/ubuntu/test-app/test-app.pid # PID 파일 생성 경로 지정

@SpringBootApplication 어노테이션을 적용한 클래스의 main() 메서드에서 SpringApplication 객체를 생성 후 addListeners() 메서드를 통해 다음과 같이 ApplicationPidFileWriter를 설정해준다.

1
2
3
4
5
public static void main(String[] args) {
SpringApplication app = new SpringApplication(Application.class);
app.addListeners(new ApplicationPidFileWriter()); // ApplicationPidFileWriter 설정
app.run(args);
}

지정한 경로에 PID 파일이 생성되는지 확인하면 끝!