zoukankan      html  css  js  c++  java
  • 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");
        }
    }


  • 相关阅读:
    支付宝接口相关整理
    诡异的 &quot;password取回&quot; 邮件问题
    剑指 offer代码解析——面试题39推断平衡二叉树
    女程序猿做了个梦,各路大神惊现神级评论!
    Mac: Android studio+VirtualBox+Genymotion
    lua 中pairs 和 ipairs差别
    機器學習基石 (Machine Learning Foundations) 作业1 Q15-17的C++实现
    怎样获取HTML5视频的持续时间
    Android之本地相冊图片选取和拍照以及图片剪辑
    19_Android中图片处理原理篇,关于人脸识别站点,图片载入到内存,图片缩放,图片翻转倒置,网上撕衣服游戏案例编写
  • 原文地址:https://www.cnblogs.com/ahang/p/6739938.html
Copyright © 2011-2022 走看看