详解spring boot 以jar的方式启动常用shell脚本
用springboot框架做的项目,将第三方包全部打在jar里面,通过shell脚本启动和停止服务,常用的shell脚本模板如下:
#!/bin/bash JAVA_OPTIONS_INITIAL=-Xms128M JAVA_OPTIONS_MAX=-Xmx512M _JAR_KEYWORDS=monitor-alarm-task-1.0-SNAPSHOT.jar APP_NAME=monitor-alarm-task APPLICATION_FILE=/opt/scpip_monitor/application.properties PID=$(psaux|grep${_JAR_KEYWORDS}|grep-vgrep|awk'{print$2}') ALARM_CONFIG_FILE=`pwd`/alarmConfig.yaml functioncheck_if_process_is_running{ if["$PID"=""];then return1 fi ps-p$PID|grep"java" return$? } case"$1"in status) ifcheck_if_process_is_running then echo-e"\033[32m$APP_NAMEisrunning\033[0m" else echo-e"\033[32m$APP_NAMEnotrunning\033[0m" fi ;; stop) if!check_if_process_is_running then echo-e"\033[32m$APP_NAMEalreadystopped\033[0m" exit0 fi kill-9$PID echo-e"\033[32mWaitingforprocesstostop\033[0m" NOT_KILLED=1 foriin{1..20};do ifcheck_if_process_is_running then echo-ne"\033[32m.\033[0m" sleep1 else NOT_KILLED=0 fi done echo if[$NOT_KILLED=1] then echo-e"\033[32mCannotkillprocess\033[0m" exit1 fi echo-e"\033[32m$APP_NAMEalreadystopped\033[0m" ;; start) if["$PID"!=""]&&check_if_process_is_running then echo-e"\033[32m$APP_NAMEalreadyrunning\033[0m" exit1 fi nohupjava-jar-Dalarm.config.file=$ALARM_CONFIG_FILE$JAVA_OPTIONS_INITIAL$JAVA_OPTIONS_MAX$_JAR_KEYWORDS--spring.config.location=$APPLICATION_FILE>/dev/null2>&1& echo-ne"\033[32mStarting\033[0m" foriin{1..20};do echo-ne"\033[32m.\033[0m" sleep1 done ifcheck_if_process_is_running then echo-e"\033[32m$APP_NAMEfail\033[0m" else echo-e"\033[32m$APP_NAMEstarted\033[0m" fi ;; restart) $0stop if[$?=1] then exit1 fi $0start ;; *) echo"Usage:$0{start|stop|restart|status}" exit1 esac exit0
正真启动的命令:
nohupjava-jar-Dalarm.config.file=$ALARM_CONFIG_FILE$JAVA_OPTIONS_INITIAL$JAVA_OPTIONS_MAX$_JAR_KEYWORDS--spring.config.location=$APPLICATION_FILE>/dev/null2>&1&
其中-Dalarm.config.file指定了外部配置文件的路径,在service初始化中通过这个路径读取外部配置文件,然后解析成对象,如下:
importjava.io.BufferedReader; importjava.io.FileInputStream; importjava.io.InputStream; importjava.io.InputStreamReader; importjava.util.HashMap; importjava.util.List; importjava.util.Map; importorg.slf4j.Logger; importorg.slf4j.LoggerFactory; importorg.springframework.stereotype.Service; importorg.yaml.snakeyaml.Yaml; importscpip.monitor.task.obj.MetricObj; @Service publicclassAlarmConfigService{ privatefinalLoggerlogger=LoggerFactory.getLogger(this.getClass()); privateMapmetricMap; publicAlarmConfigService(){ metricMap=newHashMap (); init(); } privatevoidinit(){ BufferedReaderbuffer; try{ InputStreamcpResource=newFileInputStream(getAlarmConfigFile()); buffer=newBufferedReader(newInputStreamReader(cpResource,"utf-8")); Yamlyaml=newYaml(); //Map >>object=(Map >>)yaml.load(getAlarmConfigFile()); Map >>object=(Map >>)yaml.load(buffer); logger.info("object=="+object); parseConfigMap(object); }catch(Exceptione){ e.printStackTrace(); } } publicMap getMetricMap(){ returnmetricMap; } //{metricName=当前响应时间,alarmValue=10,20,40,columnName=response_time}, privatevoidparseConfigMap(Map >>object){ MetricObjobj=null; for(Stringkey:object.keySet()){ List
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。