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

 更新时间:2017年09月19日 11:18:49   作者:矮子爬楼梯  
本篇文章主要介绍了详解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入门基础之依赖注入

    Spring入门基础之依赖注入

    Idea中使用@Autowire注解会出现提示黄线,强迫症患者看着很难受,使用构造器注入或者setter方法注入后可解决,下面我们一起来看看
    2022-07-07
  • java中Optional的使用详细解析

    java中Optional的使用详细解析

    这篇文章主要介绍了java新特性之Optional的详细解析,文中有非常详细的代码示例,对正在学习java的小伙伴们有非常好的帮助,需要的朋友可以参考下
    2021-04-04
  • 在SpringBoot项目中整合拦截器的详细步骤

    在SpringBoot项目中整合拦截器的详细步骤

    在系统中经常需要在处理用户请求之前和之后执行一些行为,例如检测用户的权限,或者将请求的信息记录到日志中,即平时所说的"权限检测"及"日志记录",下面这篇文章主要给大家介绍了关于在SpringBoot项目中整合拦截器的相关资料,需要的朋友可以参考下
    2022-09-09
  • java常用工具类 Reflect反射工具类、String字符串工具类

    java常用工具类 Reflect反射工具类、String字符串工具类

    这篇文章主要为大家详细介绍了java常用工具类,包括Reflect反射工具类、String字符串工具类,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-05-05
  • java实现二分法查找出数组重复数字

    java实现二分法查找出数组重复数字

    这篇文章主要为大家详细介绍了java实现二分法查找出数组重复数字,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11
  • Java中BigDecimal序列化科学计数法前端展示问题踩坑实战

    Java中BigDecimal序列化科学计数法前端展示问题踩坑实战

    BigDecimal是处理高精度的浮点数运算的常用的一个类当需要将BigDecimal中保存的浮点数值打印出来,这篇文章主要给大家介绍了关于Java中BigDecimal序列化科学计数法前端展示问题踩坑的相关资料,需要的朋友可以参考下
    2024-04-04
  • Springboot+MybatisPlus+Oracle实现主键自增的示例代码

    Springboot+MybatisPlus+Oracle实现主键自增的示例代码

    这篇文章主要介绍了Springboot+MybatisPlus+Oracle实现主键自增的示例代码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-11-11
  • mybatis in查询传入String方式

    mybatis in查询传入String方式

    这篇文章主要介绍了mybatis in查询传入String方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • 手把手教你写Maven的archetype项目脚手架

    手把手教你写Maven的archetype项目脚手架

    本文主要介绍了Maven的archetype项目脚手架,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • springboot整合ehcache 实现支付超时限制的方法

    springboot整合ehcache 实现支付超时限制的方法

    在线支付系统需要极高的稳定性,在有限的系统资源下,稳定性优先级要高于系统并发以及用户体验,因此需要合理的控制用户的支付请求。下面通过本文给大家介绍springboot整合ehcache 实现支付超时限制的方法,一起看看吧
    2018-01-01

最新评论