jar包同级⽬录访问路径_Linux下修改jar包内配置⽂件
⽂末有彩蛋,⼀定要看到最后哦
写在前⾯
英雄联盟亚运会直播在很多情况下我们开发的项⽬,
对于⼀些配置的信息,
因为改动的频率不⾼,
多数情况下我们都会储存在配置⽂件⾥,
项⽬上线后需要调整相关参数时,
⼀般都是由管理⼈员进⾏调整;
我们说的管理⼈员⼀般是指运维⼈员或开发⼈员;
⽆论是运维还是开发都属于相对专业的⼈⼠,
在⽣产环境调整各配置⽂件的参数对他们来说真的太easy啦。
但是我们也会有专门为客户开发项⽬的情况。
⽽客户那⾥可能没有这些专业⼈员,
即便你教给他们,韩文 我爱你
下次再有修改需要的时候依然还会你。
再者说让⾮专业⼈⼠修改,
改错的⼏率很⾼,对系统的风险也很太⼤。
所以在这个时候我们⼀般都会在前端界⾯提供可视化配置;
⽅案选择
在说怎么修改之前⾸先确定⼀下打包⽅式,
我们在之前的专栏⾥跟⼤家说到过,
项⽬打包⽅式分⼀般两种,
⼀种是jar包⼀种是war包,
如若是前后端分离的框架,
⼀般推荐以jar包的⽅式进⾏打包部署。
当然你⾮要以war包的⽅式部署也不是不⾏,
并且咱们在前的⽂章也有写到过。
根据⾃⼰现状视情况⽽定吧;
咱们这⾥要说的是两种打包⽅式,
就代表我们在开发阶段就要选择不同开发⽅案。
War包的部署⽅式(具体步骤看往期⽂章)在我们运⾏tomcat时,
会⾃动给解压难度不⼤,
这⾥给⼤家推荐⼀个插件——【snakeyaml】,
使⽤时在项⽬引⼊相关依赖即可,
武夷山岩茶如下图⽰:
因为难度不⼤这⾥就不过多着墨啦。
另⼀种就是以jar包的⽅式修改⽂件,
jar包⽅式就有点不同啦,
这也是这篇我们重点要讨论的。
正⽂开始
怎么不同呢?
前两天有个⼩伙伴到我说,
奇怪啦,我在开发环境修改配置⽂件没有问题。
但是我打包后部署到Linux服务器上后,
在修改之前的读取信息那⼀步就失败啦。
调试半天啦,不到原因,
搞了⼀肚⼦⽕,Linux系统真完蛋。
我说你先打住,什么问题啊?
报什么错,抛了什么异常吗?
他看完⽇志,给我发过来这么⼀句;
“file:/usr/local/…/l No such file or directory”(没有类似的⽂件或⽬录)
初步判断这种情况,
⾸先排除的是⽂件不存在,
如果⽂件真的不存在,
登录进⼊系统那⼀步就抛异常啦。
简单了解⼀下情况后,
名字好听点的我跟他说这个跟⼈家系统可没关系,
这个跟你打的jar包有关系
你在开发环境执⾏没有问题的原因是项⽬还没有打包,
程序在访问classes⽬录下的⽂件时可以顺利访问并被调⽤,这就好⽐你知道你情敌家的住址,
并且想修理下他解解⽓,
此时你进⼊他没有门更没上锁的家,
⼀路都畅通⽆阻,
并顺利这个倒霉的家伙,
不由分说,
瞅准他左脸你上去就是⼀⼤⽿帖⼦,
接着右脸再来⼀记左勾拳……
⼀番云⾬后你打开他家的冰箱,
拿出他珍藏已久的益达,
左⼿握紧瓶⾝,
然后拇指向上轻轻⼀弹,
只听得 “啪…”⼀声爽脆传出,
“我的益…”只见你的情敌
此时正不顾⼀切朝你飞扑⽽来…
说时迟那时快你右脚协同左脚快速后撤,耐玩的单机游戏
并以迅雷不及响叮当之势迅速转⾝,
同时右⼿抓住他试图抢夺瓶⼦的胳膊,
随着惯性顺势往前猛的⼀拉,
右脚弹起扫过他的脚踝…
此时“达”字出⼝,
⼈已蜷缩在墙⾓,
嘤嘤⽽泣…
但见瓶盖弹起,
你悠悠在嘴⾥放了两粒,
⼀丝清凉夹杂着丝丝甜意沁⼊⼼脾
双眼微闭、如沐春风,
稍后扬长⽽去,
消失在烈⽇的骄阳⾥…
但是项⽬打包后情况就不⼀样啦,
程序执⾏到这⾥的时候发现⾃⼰进不去了,
要访问的classes⽬录下的⽂件被保护起来啦,
就好像被你虐过的情敌长了记性,
六一文案朋友圈带着肿胀的脸和失去⼼爱益达的郁闷⼼情,
拨通了家装公司的电话…
等你再想吃益达的时候…
突然发现,我(艹)去…
院⼦啥时候安装了防盗门⽽且还上了锁呢…
此时的你进不去院⼦,也就不到想⼈,
更吃不到⼼爱的益达…
你很烦躁…
但是为了在精神上安慰下⾃⼰那颗失落的⼼。
采⽤精神胜利法下了个结论:
这哥们没在家(No such file or directory)
如何解决
那么办呢?
把jar包改成war包?
拆东墙补西墙⽽且窟窿更⼤,
肯定不可取。
让客户凑合⽤得?
客户的⼝味⼀向刁钻
能说服他们的话,
我敬你是个⼈物,
(很多通情达理有修养的好客户不在此列)
写个单独的服务搞个配置中⼼?
对于ALL In One(单项⽬) 类型的项⽬来说实在是没有必要,当然如果是分布式的就另说啦。
这也不⾏,那也不⾏…
⽆解了吗?
别急……
这⾥提供⼀种⽅案给⼤家做参考,
咱们这⾥是以部署在Linux下为例,
逻辑也很简单,
就是采⽤shell脚本的⽅式,
然后利⽤java代码调⽤shell脚本
来达到我们配置后台信息的⽬的
步骤如下:
Shell脚本主要做四件事
1、 解压jar包
2、 接收参数并修改指定⽂件的节点值
3、 再次打包
4、 重启服务
你不要感觉步骤不少,
其实代码不多
来看下代码截图,
如下图⽰:
根据上图我们可以看到就更改了三个(host、port、min)参数,我保存的时候⽂件后缀保存为.sh即可
部署的时候与jar包放在相同的⽬录层级即可,
代码:
unzip -o XXXX.jar
echo $1
sed -i "s/host:.*/host: $1/" BOOT-INF/l
sed -i "s/port:.*/port: $2/" BOOT-INF/l
sed -i "s/min:.*/min: $3/" BOOT-INF/l
jar uvf XXXX.jar BOOT-INF/l
./start.sh
echo 'I am restarting'
Tip:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论