반응형
개요
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
반응형
'back end > java' 카테고리의 다른 글
SpringBoot 3.0에서 QueryDsl gradle 설정 방법 (0) | 2023.02.06 |
---|---|
'org.springframework.web.servlet.handler.HandlerInterceptorAdapter' is deprecated (0) | 2023.02.06 |
[java] Get the "last modified" date from a file (0) | 2023.01.07 |
ClassNotFoundException: JAXBException 해결 방법 (0) | 2023.01.06 |
How to append text to an existing file in Java? (0) | 2023.01.01 |