详解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();
}
}
publicMapgetMetricMap(){
returnmetricMap;
}
//{metricName=当前响应时间,alarmValue=10,20,40,columnName=response_time},
privatevoidparseConfigMap(Map>>object){
MetricObjobj=null;
for(Stringkey:object.keySet()){
List
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。