问题描述
在公司中开发完成多项微服务后,我在测试服务器上写了一个微服务群起脚本,但是发现每次启动后Springboot的配置文件读取有误,并没有读取jar包同目录下的application-prod.yml配置文件,而是读取了打包内的application-dev.yml配置文件
原启动脚本如下
#!/bin/bash
echo "########### 停止所有zsxx-cloud微服务 ############"
for i in $(jps -l | grep zsxx-cloud)
do
if [[ $i =~ 'zsxx-cloud' ]]; then
echo "停止服务:$i";
else
kill $i;
fi
done
echo "########### 重新启动所有微服务 #############"
BASE_DIR='/zsc/service/'
for i in $( ls $BASE_DIR )
do
if [[$i=~'sh']]||[[$i=~'vue']]; then
echo "跳过:${i}"
else
for j in $( ls ${BASE_DIR}${i}/*.jar )
do
echo "开启服务:${j}......"
java -jar $j &
done
fi
done
问题分析
经过网上搜索,并自己实验测试后发现,是因为脚本中的java -jar xxx
后跟着的是微服务jar包的绝对路径,并没有cd进入到jar包所在路径再执行开启命令,因此springboot并没有找到同级目录下的配置文件
解决办法
只要修改启动脚本,在每次启动前执行一次cd命令进入jar包所在目录即可。
修改后的shell脚本
#!/bin/bash
echo "########### 停止所有zsxx-cloud微服务 ############"
for i in $(jps -l | grep zsxx-cloud)
do
if [[ $i =~ 'zsxx-cloud' ]]; then
echo "停止服务:$i";
else
kill $i;
fi
done
echo "########### 重新启动所有微服务 #############"
BASE_DIR='/zsc/service/'
for i in $( ls $BASE_DIR )
do
if [$i=~'sh']||[$i=~'vue']; then
echo "跳过:${i}"
else
cd ${BASE_DIR}${i}
echo "进入微服务目录:${BASE_DIR}${i}"
for j in $( ls *.jar )
do
echo "开启服务:${j}......"
java -jar $j &
sleep 2;
done
fi
done