spring boot 以jar的方式启动常用shell脚本

用spring boot框架做的项目,将第三方包全部打在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=$(ps aux | grep ${_JAR_KEYWORDS} | grep -v grep | awk '{print $2}' )
ALARM_CONFIG_FILE=`pwd`/alarmConfig.yaml


function check_if_process_is_running {
if [ "$PID" = "" ]; then
return 1
fi
ps -p $PID | grep "java"
return $?
}



case "$1" in
status)
if check_if_process_is_running
then
echo -e "33[32m $APP_NAME is running 33[0m"
else
echo -e "33[32m $APP_NAME not running 33[0m"
fi
;;
stop)
if ! check_if_process_is_running
then
echo -e "33[32m $APP_NAME already stopped 33[0m"
exit 0
fi
kill -9 $PID
echo -e "33[32m Waiting for process to stop 33[0m"
NOT_KILLED=1
for i in {1..20}; do
if check_if_process_is_running
then
echo -ne "33[32m . 33[0m"
sleep 1
else
NOT_KILLED=0
fi
done
echo
if [ $NOT_KILLED = 1 ]
then
echo -e "33[32m Cannot kill process 33[0m"
exit 1
fi
echo -e "33[32m $APP_NAME already stopped 33[0m"
;;
start)
if [ "$PID" != "" ] && check_if_process_is_running
then
echo -e "33[32m $APP_NAME already running 33[0m"
exit 1
fi
nohup java -jar -Dalarm.config.file=$ALARM_CONFIG_FILE $JAVA_OPTIONS_INITIAL $JAVA_OPTIONS_MAX $_JAR_KEYWORDS --spring.config.location=$APPLICATION_FILE > /dev/null 2>&1 &
echo -ne "33[32m Starting 33[0m"
for i in {1..20}; do
echo -ne "33[32m.33[0m"
sleep 1
done
if check_if_process_is_running
then
echo -e "33[32m $APP_NAME fail 33[0m"
else
echo -e "33[32m $APP_NAME started 33[0m"
fi
;;
restart)
$0 stop
if [ $? = 1 ]
then
exit 1
fi
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
exit 1
esac


exit 0

 

正真启动的命令:

nohup java -jar -Dalarm.config.file=$ALARM_CONFIG_FILE $JAVA_OPTIONS_INITIAL $JAVA_OPTIONS_MAX $_JAR_KEYWORDS --spring.config.location=$APPLICATION_FILE > /dev/null 2>&1 & 

其中-Dalarm.config.file 指定了外部配置文件的路径,在service初始化中通过这个路径读取外部配置文件,然后解析成对象,如下:

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.yaml.snakeyaml.Yaml;

import scpip.monitor.task.obj.MetricObj;

@Service
public class AlarmConfigService {
    private final Logger logger = LoggerFactory.getLogger(this.getClass());
    private Map<String,MetricObj> metricMap;
    public AlarmConfigService (){
        metricMap = new HashMap<String,MetricObj>();
        init();
    }
    
    private void init(){
        
        BufferedReader buffer;
        try {
            
            InputStream cpResource = new FileInputStream(getAlarmConfigFile());
            buffer = new BufferedReader(new InputStreamReader(cpResource,"utf-8"));
            Yaml yaml = new Yaml();
            //Map<String, List<Map<String,String>>> object = (Map<String,  List<Map<String,String>>>) yaml.load(getAlarmConfigFile());
            Map<String, List<Map<String,String>>> object = (Map<String,  List<Map<String,String>>>) yaml.load(buffer);
            logger.info("object==" + object);
            parseConfigMap(object);
        } catch (Exception e) {
            e.printStackTrace();
        }
        
    }

   public Map<String, MetricObj> getMetricMap() {
        return metricMap;
    }

    //{metricName=当前响应时间, alarmValue=10,20,40, columnName=response_time}, 
    private void parseConfigMap(Map<String,List<Map<String,String>>> object){
        MetricObj obj = null;
        for (String key : object.keySet()) {
            List<Map<String,String>> values = object.get(key);
            for(Map<String,String> map : values){
                obj = new MetricObj();
                String metricName = map.get("metricName");
                obj.setAlarmValue(map.get("alarmValue"));
                obj.setColumnName(map.get("columnName"));
                obj.setTableName(map.get("tableName"));
                obj.setMetricName(metricName);
                metricMap.put(metricName,obj);
              }
        }
    }
    
    private static String getAlarmConfigFile() {
           return  System.getProperty("alarm.config.file");
    }
}


原文地址:https://www.cnblogs.com/ahang/p/6739938.html