0
点赞
收藏
分享

微信扫一扫

java -D的一些学习和使用

背景

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 "



举报

相关推荐

0 条评论