首页 > 开发 > Java > 正文

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

2024-07-13 10:11:37
字体:
来源:转载
供稿:网友

用spring boot框架做的项目,将第三方包全部打在jar里面,通过shell脚本启动和停止服务,常用的shell脚本模板如下:

#!/bin/bashJAVA_OPTIONS_INITIAL=-Xms128MJAVA_OPTIONS_MAX=-Xmx512M_JAR_KEYWORDS=monitor-alarm-task-1.0-SNAPSHOT.jarAPP_NAME=monitor-alarm-taskAPPLICATION_FILE=/opt/scpip_monitor/application.propertiesPID=$(ps aux | grep ${_JAR_KEYWORDS} | grep -v grep | awk '{print $2}' )ALARM_CONFIG_FILE=`pwd`/alarmConfig.yamlfunction 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 "/033[32m $APP_NAME is running /033[0m" else echo -e "/033[32m $APP_NAME not running /033[0m" fi ;; stop) if ! check_if_process_is_running then echo -e "/033[32m $APP_NAME already stopped /033[0m" exit 0 fi kill -9 $PID echo -e "/033[32m Waiting for process to stop /033[0m" NOT_KILLED=1 for i in {1..20}; do if check_if_process_is_running then echo -ne "/033[32m . /033[0m" sleep 1 else NOT_KILLED=0 fi done echo if [ $NOT_KILLED = 1 ] then echo -e "/033[32m Cannot kill process /033[0m" exit 1 fi echo -e "/033[32m $APP_NAME already stopped /033[0m" ;; start) if [ "$PID" != "" ] && check_if_process_is_running then echo -e "/033[32m $APP_NAME already running /033[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 "/033[32m Starting /033[0m"  for i in {1..20}; do echo -ne "/033[32m./033[0m" sleep 1 done if check_if_process_is_running  then echo -e "/033[32m $APP_NAME fail /033[0m" else echo -e "/033[32m $APP_NAME started /033[0m" fi ;; restart) $0 stop if [ $? = 1 ] then exit 1 fi $0 start ;; *) echo "Usage: $0 {start|stop|restart|status}" exit 1esacexit 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;@Servicepublic 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");  }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持VeVb武林网。

 

注:相关教程知识阅读请移步到JAVA教程频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表