• Linux简单shell脚本部署项目


    1、挂载配置文件运行

    # ================JDK指定17版本运行================
    function start(){
            echo "the enviroment is ${m4c_env}"
            echo "starting springboot app:my_web.jar"
            echo "nohup /opt/data/hcym4c/jdk/jdk-17.0.5/bin/java -jar ${JAVA_OPTS} my_web.jar -Dproc_name=${m4c_env} --spring.config.location=${CONFIG_DIR}/bootstrap.yml --logging.config=${CONFIG_DIR}/logback-config/logback-${env}.xml > ${catalina_file} 2>&1 &"
    	nohup /opt/data/my/jdk/jdk-17.0.5/bin/java -jar ${JAVA_OPTS} my_web.jar -Dproc_name=${m4c_env} --spring.config.location=${CONFIG_DIR}/bootstrap.yml --logging.config=${CONFIG_DIR}/logback-config/logback-${env}.xml > ${catalina_file} 2>&1 &
    }
     
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    2、配置文件执行顺序和优先级

    2.1 SpringBoot工程读取配置文件具有优先级

    优先级由高到低依次为

    • 通过命令行–spring.config.location指定配置文件路径(优先级最高)
    • jar包同级别目录中的config文件夹下的配置文件
    • jar包同级别目录中的配置文件
    • jar包内的配置文件
    2.2 application.yml与bootstrap.yml的区别
    1.加载顺序

    若application.yml 和bootstrap.yml 在同一目录下:bootstrap.yml 先加载 application.yml后加载

    bootstrap.yml 用于应用程序上下文的引导阶段。bootstrap.yml 由父Spring ApplicationContext加载。

    2.配置区别

    bootstrap.yml 和 application.yml 都可以用来配置参数。

    bootstrap.yml 用来程序引导时执行,应用于更加早期配置信息读取。可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。一旦bootStrap.yml 被加载,则内容不会被覆盖。

    application.yml 可以用来定义应用级别的, 应用程序特有配置信息,可以用来配置后续各个模块中需使用的公共参数等。

    3.属性覆盖问题

    启动上下文时,Spring Cloud 会创建一个 Bootstrap Context,作为 Spring 应用的 Application Context 的父上下文。

    初始化的时候,Bootstrap Context 负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的 Environment。Bootstrap 属性有高优先级,默认情况下,它们不会被本地配置覆盖。

    也就是说如果加载的 application.yml 的内容标签与 bootstrap 的标签一致,application 也不会覆盖 bootstrap,而 application.yml 里面的内容可以动态替换。

    3、部署脚本

    #!/bin/bash
    
    current_dir=`pwd`
    myweb_env=myweb2_web
    log_dir=${current_dir}/logs
    catalina_file=${log_dir}/catalina/catalina.out
    env=$(cat ${current_dir}/config/bootstrap.yml | grep active | awk '{print $2}'|sed 's/[\r|\n]//g')
    
    if [ ! -d $log_dir ];  then
      mkdir -p $log_dir
      echo "mkdir log directory '${log_dir}'"
    fi
    
    # 判断文件是否存在,!取反值,不存在就创建
    if [ ! -f $catalina_file ];  then
      touch ${catalina_file}
      echo "touch log file '${catalina_file}'"
    else
      curday=`date +%Y%m%d`
      curday="${curday}000000"
      catalina_file_modify_time=`stat ${catalina_file} | sed -n '6,1p' | awk '{print $2, $3}'| sed -e 's/[-: ]//g'`
      catalina_file_modify_time=${catalina_file_modify_time%%.*} 
      #echo "catalina_file_modify_time=${catalina_file_modify_time},curday=${curday}"
      if [ ${catalina_file_modify_time} -lt ${curday} ]; then
            #echo "check log file last modify time < current date, so mv ${catalina_file} -> ${catalina_file}.`date -d last-day +%Y-%m-%d`"
      	mv ${catalina_file} ${catalina_file}.`date -d last-day +%Y-%m-%d`
            touch ${catalina_file}
      fi
    fi
    
    JAVA_OPTS="-XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -Xms2048m -Xmx2048m -Xmn512m -Xss256k -XX:SurvivorRatio=8 -Djava.awt.headless=true  -Djava.security.egd=file:/dev/./urandom"
    GC_PLS="-XX:ParallelGCThreads=16 -XX:MaxTenuringThreshold=5 -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:CMSInitiatingOccupancyFraction=70"
    JAVA_OPTS="$JAVA_OPTS"
    CONFIG_DIR="/opt/data/hcymyweb/myweb2/web/config"
    
    function usage(){
            echo
            echo "usage: $0 [start | stop | restart | status]"
            echo
    }
    # ================JDK指定17版本运行================
    function start(){
            echo "the enviroment is ${myweb_env}"
            echo "starting springboot app:myweb2_web.jar"
            echo "nohup /opt/data/hcymyweb/jdk/jdk-17.0.5/bin/java -jar ${JAVA_OPTS} myweb2_web.jar -Dproc_name=${myweb_env} --spring.config.location=${CONFIG_DIR}/bootstrap.yml --logging.config=${CONFIG_DIR}/logback-config/logback-${env}.xml > ${catalina_file} 2>&1 &"
    	nohup /opt/data/hcymyweb/jdk/jdk-17.0.5/bin/java -jar ${JAVA_OPTS} myweb2_web.jar -Dproc_name=${myweb_env} --spring.config.location=${CONFIG_DIR}/bootstrap.yml --logging.config=${CONFIG_DIR}/logback-config/logback-${env}.xml > ${catalina_file} 2>&1 &
    }
    
    function stop(){
            #PID=`ps -ef | grep ${myweb_env} | grep -v grep | awk '{print $2}'`
            PID=$(ps x --sort=start_time | grep -v grep | grep -m 1 -w Dproc_name=${myweb_env} | awk '{print $1}')
            if [ -n "$PID" ];then
                    echo "stopping app ${PID} ..."
                    kill -9 $PID
             else
                    echo "stopped ... "
            fi
    }
    
    function status(){
             PID=`ps x |grep -v grep| grep ${myweb_env} | awk '{print $1}'`
             if [ $PID > 0 ];then
                    echo
                    echo "${myweb_env} is running ..."
                    echo
             else
                    echo
                    echo "${myweb_env} stopped ... "
                    echo
             fi
             ps -ef | grep ${myweb_env}
    }
    
    function restart(){
            stop
            sleep 2
            start
    }
    
    function main(){
            case $1 in
            'start')
                    start
                    ;;
            'stop')
                    stop
                    ;;
            'restart')
                    restart
                    ;;
            'status')
                    status
                    ;;
            esac
    }
    
    main $1
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98

    在这里插入图片描述

  • 相关阅读:
    wpf中TreeView的滚动条
    java程序中为什么经常使用tomcat
    【笔记】微信小程序右上角胶囊按钮(标题设置透明后的处理)
    网络编程套接字
    vue路由之路由的两种模式
    最优控制理论(一)基本概念
    Sentinel 熔断规则 (DegradeRule)
    java 入土--集合详解
    数据分析与数据挖掘研究之一
    目标检测Neck:FPN(Feature Pyramid Network)与PAN(附python代码)
  • 原文地址:https://blog.csdn.net/weixin_43961117/article/details/127794787