全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

详解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 "\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 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");
  }
}

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


# spring  # boot  # shell  # springboot  # shell脚本  # Spring Boot项目中jar包在服务器上启动的正确姿势  # springboot扫描引入jar包的service等组件方式  # SpringBoot项目运行jar包启动的步骤流程解析  # 使用springboot的jar包能够以service方式启动  # 配置文件  # 第三方  # 大家多多  # 响应时间  # stop  # stopped  # running  # Waiting  # process  # exit  # kill  # fi  # java  # check_if_process_is_running  # return  # status  # echo  # case  # file  # location 


相关文章: 如何在香港免费服务器上快速搭建网站?  行程制作网站有哪些,第三方机票电子行程单怎么开?  制作表格网站有哪些,线上表格怎么弄?  香港服务器WordPress建站指南:SEO优化与高效部署策略  标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?  如何配置FTP站点权限与安全设置?  制作网站的软件下载免费,今日头条开宝箱老是需要下载怎么回事?  如何在云指建站中生成FTP站点?  Swift中循环语句中的转移语句 break 和 continue  如何在阿里云购买域名并搭建网站?  最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?  如何快速搭建自助建站会员专属系统?  内部网站制作流程,如何建立公司内部网站?  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  官网自助建站平台指南:在线制作、快速建站与模板选择全解析  个人网站制作流程图片大全,个人网站如何注销?  东莞市网站制作公司有哪些,东莞找工作用什么网站好?  建站之星导航配置指南:自助建站与SEO优化全解析  香港服务器如何优化才能显著提升网站加载速度?  教程网站设计制作软件,怎么创建自己的一个网站?  制作公司内部网站有哪些,内网如何建网站?  已有域名能否直接搭建网站?  建站中国官网:模板定制+SEO优化+建站流程一站式指南  想学网站制作怎么学,建立一个网站要花费多少?  建站主机解析:虚拟主机配置与服务器选择指南  网站制作的步骤包括,正确网址格式怎么写?  网站制作模板下载什么软件,ppt模板免费下载网站?  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  如何快速搭建高效可靠的建站解决方案?  ,购物网站怎么盈利呢?  制作电商网页,电商供应链怎么做?  如何在云服务器上快速搭建个人网站?  营销式网站制作方案,销售哪个网站招聘效果最好?  定制建站如何定义?其核心优势是什么?  浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?  独立制作一个网站多少钱,建立网站需要花多少钱?  如何高效配置IIS服务器搭建网站?  高防网站服务器:DDoS防御与BGP线路的AI智能防护方案  制作网站的软件免费下载,免费制作app哪个平台好?  小型网站制作HTML,*游戏网站怎么搭建?  建站org新手必看:2024最新搭建流程与模板选择技巧  广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?  如何通过虚拟主机快速搭建个人网站?  济南网站建设制作公司,室内设计网站一般都有哪些功能?  百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  ,网站推广常用方法?  ,怎么用自己头像做动态表情包?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  建站之星如何实现网站加密操作? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。