通过应用程序使用的jar文件传递环境变量
Passing environment variables through jar file which app uses
我目前正在尝试 docker link 我的应用程序和数据库容器之间。我检查了我的应用程序容器,当我 link 将容器放在一起时,环境变量会自动设置。
我想要做的是让我的配置文件被打包成一个 jar 文件,以接收环境变量并为其设置所需的值。有什么建议或帮助吗?
这就是我在 jar 文件中创建配置文件以连接到 MySQL
的方式
database { url="jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/mydb" driver="com.mysql.jdbc.Driver"}
更新 jar 中的配置文件可能有点矫枉过正。
它认为你有多种选择
- 在你的程序中直接读取配置环境变量
- 直接使用变量或在那里生成配置文件
- 创建启动脚本(这取决于你的客人 os 在 docker 如何做; sh/bash 对于 linux 等。)
- 该脚本可以从环境中生成新的配置文件并将其放在 jar 之前的类路径中,以便您的程序可以看到它。
编辑:添加示例
您可以将这种启动器脚本保存在 docker 图像上,它会在启动实际程序之前动态创建配置。
#!/bin/bash
# some default values for testing even without links to other container
MYSQL_PORT_3306_TCP_ADDR=${MYSQL_PORT_3306_TCP_ADDR:-127.0.0.1}
MYSQL_PORT_3306_TCP_PORT=${MYSQL_PORT_3306_TCP_PORT:-3306}
cat << EOF > /opt/yourprogram/dbconfig.conf
database { url="jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/mydb" driver="com.mysql.jdbc.Driver"
}
EOF
scala -classpath /opt/yourprogram YourProgram
我所做的是在我的目录 /tmp/restcore-1.0-SNAPSHOT/bin 中编写 sh 文件,如下所示:
#!/bin/bash echo "database{url="jdbc:mysql://"${MYSQL_PORT_3306_TCP_ADDR}":"${MYSQL_PORT_3306_TCP_PORT}"/mydb" driver="com.mysql.jdbc.Driver" }" > myconf.conf
jar uf /tmp/restcore-SNAPSHOT/lib/com.organization.restcore-1.0-SNAPSHOT.jar /tmp/restcore-1.0-SNAPSHOT/bin/myconf.conf
在 CMD 中构建 Dockerfile 和 运行 sh 文件后,我使用 cat myconf.conf 检查配置文件,我将能够看到环境设置。
我目前正在尝试 docker link 我的应用程序和数据库容器之间。我检查了我的应用程序容器,当我 link 将容器放在一起时,环境变量会自动设置。
我想要做的是让我的配置文件被打包成一个 jar 文件,以接收环境变量并为其设置所需的值。有什么建议或帮助吗?
这就是我在 jar 文件中创建配置文件以连接到 MySQL
的方式database { url="jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/mydb" driver="com.mysql.jdbc.Driver"}
更新 jar 中的配置文件可能有点矫枉过正。 它认为你有多种选择
- 在你的程序中直接读取配置环境变量
- 直接使用变量或在那里生成配置文件
- 创建启动脚本(这取决于你的客人 os 在 docker 如何做; sh/bash 对于 linux 等。)
- 该脚本可以从环境中生成新的配置文件并将其放在 jar 之前的类路径中,以便您的程序可以看到它。
编辑:添加示例
您可以将这种启动器脚本保存在 docker 图像上,它会在启动实际程序之前动态创建配置。
#!/bin/bash
# some default values for testing even without links to other container
MYSQL_PORT_3306_TCP_ADDR=${MYSQL_PORT_3306_TCP_ADDR:-127.0.0.1}
MYSQL_PORT_3306_TCP_PORT=${MYSQL_PORT_3306_TCP_PORT:-3306}
cat << EOF > /opt/yourprogram/dbconfig.conf
database { url="jdbc:mysql://${MYSQL_PORT_3306_TCP_ADDR}:${MYSQL_PORT_3306_TCP_PORT}/mydb" driver="com.mysql.jdbc.Driver"
}
EOF
scala -classpath /opt/yourprogram YourProgram
我所做的是在我的目录 /tmp/restcore-1.0-SNAPSHOT/bin 中编写 sh 文件,如下所示:
#!/bin/bash echo "database{url="jdbc:mysql://"${MYSQL_PORT_3306_TCP_ADDR}":"${MYSQL_PORT_3306_TCP_PORT}"/mydb" driver="com.mysql.jdbc.Driver" }" > myconf.conf
jar uf /tmp/restcore-SNAPSHOT/lib/com.organization.restcore-1.0-SNAPSHOT.jar /tmp/restcore-1.0-SNAPSHOT/bin/myconf.conf
在 CMD 中构建 Dockerfile 和 运行 sh 文件后,我使用 cat myconf.conf 检查配置文件,我将能够看到环境设置。