back end/java

Windows에 Springboot Service 등록하는 방법

노루아부지 2023. 2. 6. 13:42
반응형

개요

Springboot로 개발 후 Windows에 서비스로 등록하는 방법은 여러 가지가 있습니다.

winsw를 이용하여 jar를 등록하는 방법이 검색하면 가장 많이 나오는 방법이고, nssm을 이용한 방법, exe로 만들어서 직접 서비스로 등록하는 방법도 있습니다.

이 글에서는 Apache Commons Daemon을 이용하여 서비스 등록하는 방법에 대해 소개합니다.

 

 

왜 Apache Commons Daemon인가?

처음에는 winsw를 사용하여 서비스를 등록했습니다. winsw를 사용하여 서비스를 등록할 경우 다음과 같이 프로세스 2개가 실행됩니다.

프로세스

 

이 경우 winsw.exe와 javaw.exe가 동기화가 되지 않아 하나만 실행되어있는 상태가 될 수 있으며, 따라서 프로세스가 실행 중인지 검사할 때 두 개를 모두 조회해야 합니다.

 

하지만 Apache Commons Daemon을 사용하면 프로세스를 하나만 실행할 수 있습니다.

 

 

Apache Commons Daemon 사용방법

1. gradle / maven의 dependency에 spring-boot-loader추가

ex) build.gradle

implementation 'org.springframework.boot:spring-boot-loader'

 

2. application.java을 다음과 같이 변경

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class PushApplication  {

  public static void main(String[] args) {
    String command = "start";
    if (args.length > 0) {
      command = args[args.length - 1];
    }
    switch (command) {
      case "start":
        SpringApplication.run(PushApplication.class, args);
        break;
      case "stop":
        System.exit(0);
        break;
      default:
    }
  }

}

 

  • 검색해보면 apache-commons-daemon을 dependency에 추가 후, Daemon을 구현하는 코드가 많이 보이는데 안 해도 됩니다.

 

3. Procrun을 이용한 서비스 등록

1) Procrun 다운로드

2) Procrun.exe이름을 서비스명과 동일하게 변경

 - 변경하지 않을 경우 정상동작하지 않는 경우 발생
3) 다음과 같이 install.bat 파일 작성

mail-api.exe //IS//mail-api ^
 --DisplayName="mail-api" ^
 --Description="mail-api for Window Service" ^
 --Jvm="C:\Program Files\ojdkbuild\java-1.8.0-openjdk-1.8.0.242-1\jre\bin\server\jvm.dll" ^
 --Classpath=mail-api.jar  ^
 --StartMode=jvm ^
 --StopMode=jvm ^
 --StartClass=org.springframework.boot.loader.JarLauncher ^
 --StopClass=org.springframework.boot.loader.JarLauncher ^
 --StartParams=start ^
 --StopParams=stop ^
 --LogPath "D:\test\service_test2" ^
 --LogLevel Debug ^
 --StdOutput auto ^
 --StdError auto
  • mail-api.exe: 변경된 Procrun.exe의 파일명
  • mail-api: 서비스명
  • --Classpath: 실행될 jar 파일명
  • --StartClass / --StopClass: (중요!) SpringBoot를 서비스로 등록할 경우 반드시 JarLauncher이어야 합니다.
  • 자세한 옵션은 공식 문서 참조

 

4) install.bat 파일 실행

728x90
반응형