SpringBootjar启动时设置环境参数的操作
Spring Boot jar 启动时设置环境参数
1 摘要
通常在使⽤ Spring Boot 开发项⽬时需要设置多环境(测试环境与⽣产环境等),但是项⽬打包却只能指定⼀种环境,有没有⼀种办法,能够只打⼀个 jar 包,但是启动的时候指定项⽬环境?作者经过在⽹上查阅资料并测试,发现这⼀功能可以实现,这就⼤⼤⽅便了项⽬的部署⼯作(可以实现多环境⾃动部署)。
2 核⼼代码
2.1 spring Boot 多环境配置
../demo-web/src/main/l
## spring config
spring:
# environment: dev|test|pro
profiles:
active: dev
2.2 spring Boot 项⽬启动命令
Linux 命令⾏后台启动 spring boot jar:
nohup java -jar xxx.jar --spring.profiles.active=test > /dev/null 2>&1 &
根据不同的部署环境修改 --spring.profiles.active 值即可
3 Spring boot 简易启动与停⽌ shell 脚本
3.1 启动脚本
../doc/script/start-springboot.sh
#!/bin/sh
#
# 启动 jar 运⾏
# 项⽬部署⽬录
projectDir=/opt/springboot/
# 项⽬运⾏ jar 名称
jarName="springbootdemo.jar"
# 脚本⽇志⽬录
logDir=/var/log/springbootdemo/
# 项⽬部署环境
profileActive=dev
# 这⾥的-x 参数判断${logDir}是否存在并且是否具有可执⾏权限
if [ ! -x "${logDir}" ]; then
mkdir -p "${logDir}"
fi
# 判断项⽬SpringBoot程序是否运⾏
count=$(ps -ef |grep ${jarName} |grep -v "grep" |wc -l)
if [ ${count} -lt 1 ]; then
cd ${projectDir}
nohup java -jar ${jarName} --spring.profiles.active=${profileActive} > /dev/null 2>&1 &
echo "$(date '+%Y-%m-%d %H:%M:%S') 启动 ${jarName} 程序 ... ..." >> ${logDir}$(date "+%Y-%m-%d").log
else
echo "$(date '+%Y-%m-%d %H:%M:%S') ${jarName} 程序运⾏正常 !!! !!!" >> ${logDir}$(date "+%Y-%m-%d").log
fi
3.2 停⽌脚本
../doc/script/stop-springboot.sh
#!/bin/sh
#
# 停⽌ jar 运⾏
# 项⽬部署⽬录
projectDir="/opt/springboot/"
# 项⽬运⾏ jar 名称
jarName="springbootdemo.jar"
# 脚本名称
scriptName="stop-springboot.sh"
# 判断项⽬SpringBoot程序是否运⾏
count=$(ps -ef |grep ${jarName} |grep -v "grep" |wc -l)
if [ ${count} -gt 0 ]; then
echo "已经存在 ${count} 个${jarName} 程序在运⾏"
# 获取正在运⾏的程序进程 id(排除 grep 本⾝、awk 命令以及脚本本⾝)
jarPid=$(ps x | grep ${jarName} | grep -v grep | grep -v '${scriptName}' | awk '{print $1}')
# 停⽌正在运⾏的项⽬进程
kill -9 ${jarPid}
output=`echo "正在关闭${jarName}程序,进程id: ${jarPid}"`
echo ${output}
else
echo '没有对应的程序在运⾏'
fi
# 删除 jar 包
rm -rf ${projectDir}${jarName}
# 进⼊项⽬部署⽬录
cd ${projectDir}
3.3 监控 Spring Boot 项⽬
⽣产环境中如果因为各种原因从⽽导致项⽬停⽌运⾏,则此时服务器便不能对外提供服务,为了保证服务能够在⽆⼈值守的时间段内持续提供服务,实现项⽬的⾃动修复/重启显得尤为重要。在这⾥,使⽤⼀种简单粗暴的⽅式,项⽬挂掉,直接重启,通过使⽤定时任务执⾏启动脚本即可。
定时任务 crontab 简单使⽤,以 centOS 7 为例:
开机启动定时任务服务
systemctl enable cornd
启动定时任务
systemctl start cornd
关闭定时任务服务
systemctl stop crond
添加、编辑定时任务
crontab -e
内容如下:
00,10,20,30,40,50 * * * * /root/script/start-xxx.sh
当前定时任务意思为每 10 分钟执⾏⼀次同步脚本
cron 表达式说明:
* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
java设置环境变量的方法代码| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)
注意事项 : */5 * * * * 表⽰每 5 分钟执⾏⼀次,但是可能会在部分系统中不执⾏
4 Github 源码
springboot项⽬启动参数详解
本⽂介绍springboot项⽬启动时增加启动参数的多种⽅式,我们都知道Spring在注⼊属性时可以通过@Value注解注⼊属性,那么@Value可以读取的范围有哪些呢?这就是本⽂的主要内容。
以下⼏种⽅式都可以被@Value读取到
1、java -jar -Dserver.port=8888 -Xms1024m demo.jar
这种⽅式增加的参数是被设置到应⽤的系统属性中,可以使⽤Property(“server.port”)获取(可以在idea的idea VM options中配置,以空格分隔)
-D(defintion)表⽰⾃定义参数
2、java -jar demo.jar --server.port=8888
这种⽅式增加的参数是属于命令⾏参数,即会从springboot启动时的main⽅法的String[] args中作为参数传⼊(可以在idea的program arguments中配置,以空格分隔)
3、从操作系统的环境变量中读取
这种⽅式的参数即属于操作系统⽅⾯的,⽐如安装jdk时设置的环境变量,定义JAVA_HOME,也可以通过
4、通过项⽬中配置⽂件bootstrap/application⽂件载⼊
这种⽅式是在项⽬中配置的⽅式,⽐较常见
以上就是常见的多种⽅式介绍
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论