没有 Spring 的 Java 隐藏属性

Thr*_*ror 6 java properties docker

我当前正在创建一个使用 MongoDB 数据库的 Java 程序,并将连接信息存储在属性文件中。

但我的项目是 GitHub 上的开源项目,我无法将连接信息存储在属性文件中。

所以我想问你是否可以提供 docker run 的登录信息。

例子 :docker run registry/image -args db.password=psw db.username=user

我在stackoverflow中看到过解决方案,但所有解决方案都使用Spring功能,但我的项目不使用Spring框架。

Thr*_*ror 8

对此我们有多种解决方案:

秘密码头工人

使用属性语法创建一个文件:

//secret-file.txt
db.password=psw
db.username=user
Run Code Online (Sandbox Code Playgroud)

使用此文件在您的 docker 中创建一个docker 密钥

//secret-file.txt
db.password=psw
db.username=user
Run Code Online (Sandbox Code Playgroud)

并将其与java 程序中的java 库docker-secrets一起使用:

$ docker secret create test-secret secret-file.txt
Run Code Online (Sandbox Code Playgroud)

有关更多示例,请查看此处


环境变量

使用参数在 docker 中设置环境变量-e

Map<String, String> secrets = DockerSecrets.loadFromFile("test-secret");
System.out.println(secrets.get("db.password")) // readonly
Run Code Online (Sandbox Code Playgroud)

System::getenv并在您的 java 程序中使用这些变量:

$ docker run -e DB_PASSWORD=pwd -e DB_USERNAME=user registry/image:tag
Run Code Online (Sandbox Code Playgroud)

虚拟机参数

此解决方案取决于用于创建 Docker 容器的基础映像。

VM 参数提供给docker run命令:

System.out.println(System.getenv("DB_PASSWORD"))
Run Code Online (Sandbox Code Playgroud)

System::getProperty并在您的 java 程序中使用这些变量:

$ docker run -e JAVA_OPTS="-Ddb.password=pwd -Ddb.username=user" registry/image:tag
Run Code Online (Sandbox Code Playgroud)

程序参数

为 docker run 命令提供参数:

声明图像后给出论据很重要。

System.out.println(System.getProperty("db.password"))
Run Code Online (Sandbox Code Playgroud)

并在 java 程序中将这些参数与main方法一起使用:

$ docker run registry/image:tag pwd user
Run Code Online (Sandbox Code Playgroud)

为了更好地处理参数,您可以使用 Apache 的commons-cli java 库或使用另一个库