【问题标题】:How to override java jar application.properties from docker environment variables如何从 docker 环境变量中覆盖 java jar application.properties
【发布时间】:2021-11-08 05:30:56
【问题描述】:

我在资源目录中有一个带有 application.properties 文件的 maven java 应用程序,并且我生成了一个 .jar,我想从 docker 环境变量中覆盖 .jar 中的 application.properties 文件。

application.properties:

url=myurl

Dockerfile:

FROM openjdk:8-jdk-alpine

COPY target/app.jar app.jar

COPY myentrypoint.sh /

CMD ["sh", "/myentrypoint.sh"]

myentrypoint.sh

#!/bin/bash

# if the env var URL is not empty
if [ ! -z "${URL}" ]; then
   echo "url=${URL}" >> application.properties
fi

exec java -jar ./app.jar $@

我想像这样覆盖 application.properties:

docker run -e URL='newurl' myimage

【问题讨论】:

    标签: java docker shell maven dockerfile


    【解决方案1】:

    如果您想覆盖该值,您可以使用单个 > 来重写文件,而不是附加到文件(例如使用双 >>)。

    here's的区别

    编辑: 如果您将 application.properties 构建到 JAR 文件中,您可以提取它更改值并再次构建它,更合适的解决方案是将属性文件放在一个公共位置,如 /home/user/application.properties 并使用此函数 System.getProperty("user.home") 或者你可以使用Java Preferences API

    here's 另一个例子。

    感谢this 线程。

    【讨论】:

    • 这不是问题,问题是如何访问 .jar 中的 application.properties 文件然后覆盖它。
    • 感谢您的回复,对于第一个建议,我不想每次更改时都构建图像,那将是不合适的方式。对于可能是解决方案的第二个建议,但 application.properties 需要在项目之外,这并不是我想要的,我想用 docker 更改 .jar 内的 application.properties,我不知道这是否可能,希望可以。
    • 它可能是如果您将添加一些“解压缩”更改和“压缩”到 JAR 文件的机制,尽管我认为它相对于导入新配置的第二个选项有点过于复杂在运行时从已安装的文件中
    猜你喜欢
    • 2017-12-24
    • 1970-01-01
    • 1970-01-01
    • 2016-02-12
    • 2018-10-01
    • 2012-11-05
    • 1970-01-01
    • 1970-01-01
    • 2022-11-21
    相关资源
    最近更新 更多