프로그램/Java

spring boot jar를 실행파일로 만드는 법

milktea.kang 2019. 3. 26. 17:50

spring excutable jar 생성

https://www.baeldung.com/spring-boot-app-as-a-service
exe 파일처럼 jar 파일이 바로 실행할 수 있는 파일이 된다
sudo ln -s /path/to/your-app.jar /etc/init.d/your-app
sudo service your-app start
daemon 용 쉘스크립트가 내장되어서 배포된다
jsvc 를 이용하는 것보다 편리한 방법이다
jsvc 를 이용하려면 commons-daemon 을 상속받아 구현해야 하는데...
pom.xml 에서 플러그인을 수정



<plugin>

    <groupId>org.springframework.boot</groupId>

    <artifactId>spring-boot-maven-plugin</artifactId>

    <configuration>

        <executable>true</executable>

    </configuration>

</plugin>



nohup 으로 서비스를 돌리는 것과 daemon 을 이용하는 것의 차이점

https://stackoverflow.com/questions/958249/whats-the-difference-between-nohup-and-a-daemon



실행용 shell script 샘플

https://docs.spring.io/spring-boot/docs/current/reference/html/deployment-install.html


#!/bin/bash

#---------------------------------------------------------------------------------

this_name="$0"

while [ -h "$this_name" ] ; do

  ls=`ls -ld "$this_name"`

  link=`expr "$ls" : '.*-> \(.*\)$'`

  if expr "$link" : '/.*' > /dev/null; then

    this_name="$link"

  else

    this_name=`dirname "$this_name"`/"$link"

  fi

done

dir_current=`dirname "$this_name"`

[ -z "$myapp_home" ] && myapp_home=`cd "$dir_current" > /dev/null; pwd`

#---------------------------------------------------------------------------------

export MODE=service

export APP_NAME="myapp-rest-v2"

export CONF_FOLDER=$myapp_home/conf

export PID_FOLDER=$myapp_home/pid

export LOG_FOLDER=$myapp_home/log

export LOG_FILENAME="$APP_NAME.log"

myapp_user="admin"

myapp_jar_path="$myapp_home/$APP_NAME-0.0.1.jar"

myapp_profile="DEV"

myapp_encoding="UTF-8"

myapp_port_http="8080"

myapp_port_jmx="18080"

myapp_ip_jmx="192.168.1.2"

#---------------------------------------------------------------------------------

JAVA_OPTS="$JAVA_OPTS -server ";

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=$myapp_encoding ";

JAVA_OPTS="$JAVA_OPTS -DSERVER_NAME=$APP_NAME ";

JAVA_OPTS="$JAVA_OPTS -DLOG_DIR=$LOG_FOLDER ";

JAVA_OPTS="$JAVA_OPTS -Dspring.profiles.active=$myapp_profile ";

JAVA_OPTS="$JAVA_OPTS -Dserver.port=$myapp_port_http ";

#---------------------------------------------------------------------------------

GC_OPTION=" -verbose:gc "

GC_OPTION="$GC_OPTION -server "

GC_OPTION="$GC_OPTION -Xloggc:$LOG_FOLDER/gc.log "

GC_OPTION="$GC_OPTION -XX:+UseParallelGC "

GC_OPTION="$GC_OPTION -XX:+PrintGCDetails "

GC_OPTION="$GC_OPTION -XX:+PrintGCTimeStamps "

GC_OPTION="$GC_OPTION -XX:+PrintHeapAtGC "

GC_OPTION="$GC_OPTION -XX:+HeapDumpOnOutOfMemoryError "

GC_OPTION="$GC_OPTION -XX:HeapDumpPath=$LOG_FOLDER/heap_dump.hprof "

#---------------------------------------------------------------------------------

#JMX_OPTION=" -Dcom.sun.management.jmxremote "

JMX_OPTION="$JMX_OPTION -Dcom.sun.management.jmxremote=true "

JMX_OPTION="$JMX_OPTION -Dcom.sun.management.jmxremote.port=$myapp_port_jmx "

JMX_OPTION="$JMX_OPTION -Dcom.sun.management.jmxremote.ssl=false "

JMX_OPTION="$JMX_OPTION -Dcom.sun.management.jmxremote.authenticate=false "

JMX_OPTION="$JMX_OPTION -Djava.rmi.server.hostname=$myapp_ip_jmx "


export JAVA_OPTS="$JAVA_OPTS $GC_OPTION $JMX_OPTION "

#---------------------------------------------------------------------------------

if [ ! -d "$CONF_FOLDER" ]; then

    mkdir $CONF_FOLDER

fi

#---------------------------------------------------------------------------------

if [ ! -d "$PID_FOLDER" ]; then

    mkdir $PID_FOLDER

fi

#---------------------------------------------------------------------------------

if [ ! -d "$LOG_FOLDER" ]; then

    mkdir $LOG_FOLDER

fi

#---------------------------------------------------------------------------------

start(){

    su $myapp_user -s /bin/bash -c "$myapp_jar_path start"

}

#---------------------------------------------------------------------------------

stop(){

    su $myapp_user -s /bin/bash -c "$myapp_jar_path stop"

}

#---------------------------------------------------------------------------------

status(){

    su $myapp_user -s /bin/bash -c "$myapp_jar_path status"

}

#---------------------------------------------------------------------------------

restart(){

    su $myapp_user -s /bin/bash -c "$myapp_jar_path restart"

}

#---------------------------------------------------------------------------------

force_reload(){

    su $myapp_user -s /bin/bash -c "$myapp_jar_path force_reload"

}

#---------------------------------------------------------------------------------

force_stop(){

    su $myapp_user -s /bin/bash -c "$myapp_jar_path force_stop"

}

#---------------------------------------------------------------------------------


case "$1" in

start)

    start

;;

stop)

    stop

;;

status)

    status

;;

restart)

    restart

;;

force-reload)

    force_reload

;;

force-stop)

    force_stop

;;

*)

    echo "Usage: $0 [start|stop|status|restart|force-reload|force-stop]"; exit 1;

;;

esac


exit 0