今天之前, 我是痛恨环境变量的, 痛恨到什么地步呢? 就是我在学校的时候, 我们班没几个同学听课, 全班一半的JDK+eclipse环境是我配置的...
起因
我不再讨厌环境变量的原因, 可能是它解决了我通过一般途径无法解决的问题了吧
比如docker环境下:
- 如何修改已经打包好的springboot项目中MySQL连接密码
- 如何修改MySQL镜像的默认端口配置
- docker中dubbo的ip/host如何修改
- 如何修改ES的内存占用
等等问题
上面的问题难度都不大, 只需要把里面东西copy出来, 再做为镜像映射一下就好了
但是, 总感觉有些不优雅
说一下我遇到的解决方案
示例
为了方便演示, 假设docker的network_mode一律为host
实际场景中, docker更推荐使用env文件来统一端口
-
docker 修改MySQL端口为8000
其实做端口映射就够用了
# docker-compose.yml version: '3' services: ly-mysql: image: mysql container_name: ly-mysql environment: MYSQL_TCP_PORT: 8000 MYSQL_ROOT_PASSWORD: password network_mode: host
只需要指定MYSQL_TCP_PORT为8000就行了
更多环境变量参考MySQL官网
能力有限我也就不翻译了
-
springboot项目修改yml配置
如果不嫌麻烦可以重新构建, 但是如果是nacos, seata这种就不太方便
JAVA_OPTS 是JVM的参数, 为java所读取
PS: 不要和
JAVA_TOOL_OPTIONS
与_JAVA_OPTIONS
混淆version: '3' services: ly-some-project: image: ly-some-project:1.2.1 container_name: ly-some-project environment: # 如同命令行中使用java -jar xx.jar -Dserver.port=1234一样 JAVA_OPTS: "-Dserver.port=1234" depends_on: - zhgd-sky-oap network_mode: "host"
关于springboot项目相关的环境变量建议参考官方文档-外化配置
-
dubbo/nacos/seata等这些程序
其实也一样, 会有一些环境变量的读取操作
例如dubbo的配置, 可以直接设置环境变量来修改监听的ip
DUBBO_DUBBO_IP_TO_BIND=192.168.2.168
dubbo上述文档页面只有docker中特有的, 还有还多其他的, 只是没有地方集中说明
-
同理, 我们还可以通过咕噜咕噜搜索关键词
xxx environment variables
来找到其他软件程序的环境变量配置如
redis为命令行参数
PS: 环境变量用到的地方很多, 大部分配置文件都是支持的, 不要拘泥于特定文件类型如yml, ini等, 主要还是看他的运行环境是否支持. nginx.conf也是支持的
docker会支持多一些环境变量, 但即便没有, java程序也可以使用JAVA_OPTS来设置, 其他程序也有相关方式
标签:dubbo,JAVA,不再,讨厌,MySQL,docker,环境变量,ly From: https://www.cnblogs.com/liangyun/p/17148839.html