zoukankan      html  css  js  c++  java
  • spring程序打包war,直接通过-jar启动,并指定spring.profiles.active参数控制多环境配置

    备注:spring boot有内嵌tomcat,jar项目可以用java -jar命令启动,war包也可以,且可以直接指定spring.profiles.active参数控制多环境配置

    直接指定传参,通过命令或脚本启动示例:

    /opt/jdk-1.8/jdk1.8.0_191/bin/java -jar -server -Xmx1024m -Xms1024m -Xmn256m -XX:PermSize=128m -Xss256k /opt/source/project/danny-test.jar --spring.profiles.active=test > /opt/source/project/info.out &

    (注意参数放在jar包后面,放前面好像不行,本人实测过)

    很多时候,我们项目在开发环境和生成环境的环境配置是不一样的,例如,数据库配置,在开发的时候,我们一般用测试数据库,而在生产环境的时候,我们是用正式的数据,这时候,我们可以利用profile在不同的环境下配置用不同的配置文件或者不同的配置

    spring boot允许你通过命名约定按照一定的格式(application-{profile}.properties)来定义多个配置文件,然后通过在application.properyies通过spring.profiles.active来具体激活一个或者多个配置文件,如果没有没有指定任何profile的配置文件的话,spring boot默认会启动application-default.properties。

    profile的配置文件可以按照application.properyies的放置位置一样,放于以下四个位置,

    1. 当前目录的 “/config”的子目录下
    2. 当前目录下
    3. classpath根目录的“/config”包下
    4. classpath的根目录下

    我们在开发Spring Boot应用时,通常同一套程序会被应用和安装到几个不同的环境,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,如果在为不同环境打包时都要频繁修改配置文件的话,那必将是个非常繁琐且容易发生错误的事。

        对于多环境的配置,各种项目构建工具或是框架的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包,Spring Boot也不例外,或者说更加简单。
           在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:
       application-dev.properties:开发环境
       application-test.properties:测试环境
       application-prod.properties:生产环境
           至于哪个具体的配置文件会被加载,需要在application.properties文件中通过spring.profiles.active属性来设置,其值对应{profile}值。
    如:spring.profiles.active=test就会加载application-test.properties配置文件内容

    多环境启动方式一(直接通过脚本指定环境参数启动)

    例:一个项目局部启动脚本

    /opt/jdk/bin/java -jar $JAVA_MEM_OPTS  $WORKDIR/*.war --spring.profiles.active=test > $WORKDIR/info.out 2>&1 &

    直接通过-jar 指定tomcat中的JAVA_OPTS .war包 spring.profiles.active 多环境配置参数启动

    完整脚本如下:

    #!/bin/sh
    source /etc/profile
    WORKDIR="/opt/source/test_web"
    PIDS=`ps -ef |grep test.war|grep java |awk '{print $2}'`
    
    case "$1" in
      'start')
    
        echo "job starting..."
        nohup /opt/jdk/bin/java -jar $JAVA_MEM_OPTS  $WORKDIR/*.war --spring.profiles.active=test > $WORKDIR/info.out 2>&1 &
        ;;
    
      'stop')
    
        echo "job shutting down..."
         if [ "$PIDS" == "" ]; then
                echo "process not exists or stop success"
                exit 0
         else
                kill -9 $PIDS
                echo  "killing  service process."
         fi
    
        ;;
    
      'logs')
    
        tail -500f $WORKDIR/info.out
        ;;
    
      'status')
        ps --pid $PIDS
        ;;
    
      'deploy')
         /root/bin/test.sh stop
         /bin/mv $WORKDIR/*.war /opt/server_backup/test.war_$(date +%F-%T)
         /bin/mv /opt/source/test.war $WORKDIR
         /root/bin/test.sh start
        ;;
    
      *)
        # usage
        echo "Usage: $0 start|stop|logs|status|deploy"
        exit 1
        ;;
    esac

    相应文件目录

    [root@xx ]# ls
    test.war  info.out
    [root@xx ]# pwd
    /opt/source/test_web

    可以看出,tomcat都不需要,只需要一个springboot的程序war包,即可启动程序

    多环境启动方式二(修改application.properties文件中的spring.profiles.active参数值)

         针对各环境新建不同的配置文件application-dev.propertiesapplication-test.propertiesapplication-prod.properties
         在这三个文件均都设置不同的server.port属性,如:dev环境设置为8080,test环境设置为9090,prod环境设置为80
         application.properties中设置spring.profiles.active=dev,就是说默认以dev环境设置
     
    测试不同配置的加载:
         执行java -jar xxx.jar,可以观察到服务端口被设置为8080,也就是默认的开发环境(dev)
     
         执行java -jar xxx.jar --spring.profiles.active=test,可以观察到服务端口被设置为9090,也就是测试环境的配置(test)
     
         执行java -jar xxx.jar --spring.profiles.active=prod,可以观察到服务端口被设置为80,也就是生产环境的配置(prod)
     然后就是传统方式启动....略


    按照上面的实验,可以如下总结多环境的配置思路:
       application.properties中配置通用内容,并设置spring.profiles.active=dev,以开发环境为默认配置
       application-{profile}.properties中配置各个环境不同的内容
    通过命令行方式去激活不同环境的配置。

    参考:http://www.leftso.com/blog/111.html

  • 相关阅读:
    [saiku] 系统登录成功后查询Cubes
    216. Combination Sum III
    215. Kth Largest Element in an Array
    214. Shortest Palindrome
    213. House Robber II
    212. Word Search II
    211. Add and Search Word
    210. Course Schedule II
    分硬币问题
    开始学习Python
  • 原文地址:https://www.cnblogs.com/dannylinux/p/10278516.html
Copyright © 2011-2022 走看看