全网整合营销服务商

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

免费咨询热线: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 


相关文章: 建站为何优先选择香港服务器?  枣阳网站制作,阳新火车站打的到仙岛湖多少钱?  如何快速搭建高效可靠的建站解决方案?  实现点击下箭头变上箭头来回切换的两种方法【推荐】  如何解决VPS建站LNMP环境配置常见问题?  rsync同步时出现rsync: failed to set times on “xxxx”: Operation not permitted  高端企业智能建站程序:SEO优化与响应式模板定制开发  如何解决ASP生成WAP建站中文乱码问题?  如何在宝塔面板创建新站点?  如何制作一个表白网站视频,关于勇敢表白的小标题?  Thinkphp 中 distinct 的用法解析  制作宣传网站的软件,小红书可以宣传网站吗?  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  高端建站三要素:定制模板、企业官网与响应式设计优化  Android滚轮选择时间控件使用详解  如何用IIS7快速搭建并优化网站站点?  成都网站制作报价公司,成都工业用气开户费用?  如何通过网站建站时间优化SEO与用户体验?  ppt制作免费网站有哪些,ppt模板免费下载网站?  如何在Windows服务器上快速搭建网站?  建站之星展会模板:智能建站与自助搭建高效解决方案  寿县云建站:智能SEO优化与多行业模板快速上线指南  智能起名网站制作软件有哪些,制作logo的软件?  头像制作网站在线制作软件,dw网页背景图像怎么设置?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  小程序网站制作需要准备什么资料,如何制作小程序?  c++怎么用jemalloc c++替换默认内存分配器【性能】  如何获取PHP WAP自助建站系统源码?  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  如何在IIS7上新建站点并设置安全权限?  可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?  如何通过宝塔面板实现本地网站访问?  定制建站流程步骤详解:一站式方案设计与开发指南  青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?  微信网站制作公司有哪些,民生银行办理公司开户怎么在微信网页上查询进度?  如何选择服务器才能高效搭建专属网站?  如何在企业微信快速生成手机电脑官网?  青浦网站制作公司有哪些,苹果官网发货地是哪里?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  如何高效利用200m空间完成建站?  如何选择高效稳定的ISP建站解决方案?  如何在橙子建站上传落地页?操作指南详解  网站制作公司排行榜,抖音怎样做个人官方网站  西安专业网站制作公司有哪些,陕西省建行官方网站?  大连 网站制作,大连天途有线官网?  建站ABC备案流程中有哪些关键注意事项?  哈尔滨网站建设策划,哈尔滨电工证查询网站?  如何高效配置IIS服务器搭建网站?  湖州网站制作公司有哪些,浙江中蓝新能源公司官网? 

您的项目需求

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