正文
背景
java开发的程序有很多进行配置的方式
可以通过 yaml文件或者是xml文件
也可以通过环境变量的方式.
1. 容器的话可以使用 -e 或者是env进行注入
2. K8S的话可以通过 configmap 或者是 env 方式进入注入
需要注意, 环境变量的注入可能是明文, configmap貌似也是用base64做了一次编码
如果实现加密还是需要用ENC等方式来实现.
摘要
自己一些测试环境, 比如端口监听等, 其实不同的目录启动,想用不同的端口
来解决端口冲突的问题.
之前的解决方式是通过sed的方式动态修改 yaml 文件来实现.
但是这一点容易被研发通过检查配置文件的hash值来堵死.
基于此 想通过其他方式来规避这个问题
想到的是 通过 -D的方式来指定端口等来解决.
处理方式
修改启动脚本:
最好的方法是在前面增加一个私有化配置:
MSUConfig="-Dserver.port=5203 -Dmsu.serviceName=zhaobshtest"
然后将这个配置节添加进具体的启动脚本:
$JAVA_HOME/bin/java $MSUConfig -jar xxx.jar
配置文件的处理方式
-D 的含义为:
Set a system property value. If value is a string that contains spaces,
you must enclose the string in double quotes:
需要注意着里面有两个注释事项:
(1)需要设置的是JVM参数而不是program参数
(2)使用此参数的参数优先级最高,会覆盖项目中配置的此项
结果验证
除非是系统内部自己进行了端口声明, 核心业务的端口是可以通过这种方式进行暴露和修改的.
后续可以设置不同的启动文件.启动多个服务.
这里有一个需要优化的点:
如果这样启动, 除了日志文件 是否可以实现应用目录的重用?
是否会有其他影响?
样例处理:
MSUConfig="-Dserver.port=5201 -Dmsu.serviceName=zhaobshtest -Dlogging.config=$IGIX_SERVER_HOME/runtime/logback-spring5201.xml "