不带Spring的Java隐藏属性

nvbavucw  于 2022-12-17  发布在  Java
关注(0)|答案(2)|浏览(79)

bounty将在6天后过期。回答此问题可获得+50声望奖励。Rasbypy希望奖励现有答案

我目前正在创建一个使用MongoDB数据库的Java程序,并将连接信息存储在一个属性文件中。
但是我的项目在GitHub上是开源的,我不能在属性文件中存储连接信息。
所以我想问你是否有可能给予从docker运行的登录信息。
示例:docker run registry/image -args db.password=psw db.username=user
我在stackoverflow中看到过解决方案,但所有的解决方案都使用Spring特性,但我的项目没有使用Spring框架。

6jjcrrmo

6jjcrrmo1#

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

秘密 Docker

使用属性语法创建文件:

//secret-file.txt
db.password=psw
db.username=user

使用此文件在您的Docker中创建一个 Docker secret

$ 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

环境变量

使用-e参数设置Docker中的环境变量:

$ docker run -e DB_PASSWORD=pwd -e DB_USERNAME=user registry/image:tag

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

System.out.println(System.getenv("DB_PASSWORD"))

VM参数

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

docker run 命令给予 *VM参数 *:

$ 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库或a another library

r8uurelv

r8uurelv2#

如果您在AWS上托管此应用程序,则可以选择使用Secrets Manager,它具有Spring -How to integrate AWS Secret Manager with Spring Boot Application的集成启动项目

相关问题