Java 没有 Spring 的隐藏属性
Java hidden properties without Spring
我目前正在创建一个使用 MongoDB 数据库的 Java 程序,并将连接信息存储在属性文件中。
但是我的项目在 GitHub 上是开源的,我无法在属性文件中存储连接信息。
所以我想问你是否可以提供来自 docker 运行 的登录信息。
示例:docker run registry/image -args db.password=psw db.username=user
我在 Whosebug 中看到了解决方案,但所有解决方案都使用 Spring 功能,但我的项目没有使用 Spring 框架。
我们有多种解决方案:
秘密Docker
使用属性语法创建文件:
//secret-file.txt
db.password=psw
db.username=user
使用此文件在您的 docker 中创建一个 docker 秘密 :
$ docker secret create test-secret secret-file.txt
并在您的 java 程序中将其与 java 库 docker-secrets 一起使用:
Map<String, String> secrets = DockerSecrets.loadFromFile("test-secret");
System.out.println(secrets.get("db.password")) // readonly
有关更多示例,请查看 here。
环境变量
在 docker 中使用 -e
参数设置环境变量:
$ docker run -e DB_PASSWORD=pwd -e DB_USERNAME=user registry/image:tag
并在您的 java 程序中将这些变量与 System::getenv
一起使用:
System.out.println(System.getenv("DB_PASSWORD"))
虚拟机参数
此解决方案取决于用于创建 Docker 容器的基础映像。
将 VM 参数 提供给 docker 运行 命令:
$ docker run -e JAVA_OPTS="-Ddb.password=pwd -Ddb.username=user" registry/image:tag
并在您的 java 程序中将这些变量与 System::getProperty
一起使用:
System.out.println(System.getProperty("db.password"))
程序参数
为 docker 运行 命令提供参数:
声明图像后给出参数很重要。
$ docker run registry/image:tag pwd user
并在 java 程序中将这些参数与 main 方法一起使用:
public static void main(String[] args) {
System.out.println("The password: " + args[0]);
System.out.println("The username: " + args[1]);
}
为了更好地处理参数,您可以使用 Apache 的 commons-cli java library or use a another library。
如果您在 AWS 上托管此应用程序,则可以选择使用 Secrets Manager,它具有 Spring -
的集成启动项目
我目前正在创建一个使用 MongoDB 数据库的 Java 程序,并将连接信息存储在属性文件中。
但是我的项目在 GitHub 上是开源的,我无法在属性文件中存储连接信息。
所以我想问你是否可以提供来自 docker 运行 的登录信息。
示例:docker run registry/image -args db.password=psw db.username=user
我在 Whosebug 中看到了解决方案,但所有解决方案都使用 Spring 功能,但我的项目没有使用 Spring 框架。
我们有多种解决方案:
秘密Docker
使用属性语法创建文件:
//secret-file.txt
db.password=psw
db.username=user
使用此文件在您的 docker 中创建一个 docker 秘密 :
$ docker secret create test-secret secret-file.txt
并在您的 java 程序中将其与 java 库 docker-secrets 一起使用:
Map<String, String> secrets = DockerSecrets.loadFromFile("test-secret");
System.out.println(secrets.get("db.password")) // readonly
有关更多示例,请查看 here。
环境变量
在 docker 中使用 -e
参数设置环境变量:
$ docker run -e DB_PASSWORD=pwd -e DB_USERNAME=user registry/image:tag
并在您的 java 程序中将这些变量与 System::getenv
一起使用:
System.out.println(System.getenv("DB_PASSWORD"))
虚拟机参数
此解决方案取决于用于创建 Docker 容器的基础映像。
将 VM 参数 提供给 docker 运行 命令:
$ docker run -e JAVA_OPTS="-Ddb.password=pwd -Ddb.username=user" registry/image:tag
并在您的 java 程序中将这些变量与 System::getProperty
一起使用:
System.out.println(System.getProperty("db.password"))
程序参数
为 docker 运行 命令提供参数:
声明图像后给出参数很重要。
$ docker run registry/image:tag pwd user
并在 java 程序中将这些参数与 main 方法一起使用:
public static void main(String[] args) {
System.out.println("The password: " + args[0]);
System.out.println("The username: " + args[1]);
}
为了更好地处理参数,您可以使用 Apache 的 commons-cli java library or use a another library。
如果您在 AWS 上托管此应用程序,则可以选择使用 Secrets Manager,它具有 Spring -