【问题标题】:Adding environment variables to Spring's application.properties将环境变量添加到 Spring 的 application.properties
【发布时间】:2020-09-18 23:35:29
【问题描述】:

我想从application.properties 运行两个 Amazon S3 的 SDK 信息,但我不想将其放入文件中,而是想在运行 ./mvnw spring-boot:run 时添加它们。我看到可以这样做:

./mvnw spring-boot:run -Dspring-boot.run.arguments="--srp.storage.s3.access-key=FOOBARFOOBAR,--srp.storage.s3.secret-key=foobarfoobarfoobarfoobarfoobar"

我尝试运行上面的命令,并在参数周围加上引号,并且它们之间有/没有空格。此外,我尝试在属性文件中保留空白值以及完全删除它们。

# srp.storage.s3.access-key=
# srp.storage.s3.secret-key=
srp.storage.s3.access-key=
srp.storage.s3.secret-key=

我有一个用@ConfigurationProperties("srp.storage") 注释的类。这些尝试的结果各不相同,从应用程序由于类未找到属性而无法启动,到实际运行但没有效果。导致服务器无法启动的命令变体未在 application.properties 中指定任何属性,并尝试运行带有和不带引号且不带空格的命令。它运行但没有生效的场景是放置空格。

我知道使用已构建的 JAR 文件运行它,但如果可能的话,我希望能够像这样运行它,以防止每次更改某些内容时都构建它。

还尝试指定此处所示的占位符,但同样没有成功。我什至可以使用./mvnw 做我想做的事吗?还是必须使用 JAR 文件?

srp.storage.s3.access-key=${access-key}
srp.storage.s3.secret-key=${secret-key}
./mvnw spring-boot:run -Dspring-boot.run.arguments="--access-key=FOOBARFOOBAR,--secret-key=foobarfoobarfoobarfoobarfoobar"

【问题讨论】:

  • 我认为-D 会解决您的问题,如果您从命令行运行它,例如:./mvnw spring-boot:run -Dspring-boot.run.arguments=FOOBARFOOBAR -Dsrp.storage.s3.access-key=something -D srp.storage.s3.secret-key=whatever
  • 抱歉,没有解决。另外,我不明白我会传递给-Dspring-boot.run.arguments 什么? “FOOBARFOOBAR”是 AWS SDK 所需的密钥之一,因此它将被传递给“access-key”。我确实尝试过使用这种语法,但没有运气。
  • 我在编辑的时候看到了,我在这里粘贴的时候搞砸了。我修好了。
  • 使用环境变量解决。这对我来说已经足够了。
  • 祝你好运,.....

标签: java spring spring-boot command-line-arguments application.properties


【解决方案1】:

使用环境变量解决。这对我来说已经足够了。 不用说,您可以为 Spring 的文件和变量中的属性选择任何您想要的名称,只需记住在 Linux 环境中您必须将变量名称设置为全部大写并使用下划线。

.bashrc.zshrc 或类似名称中,添加:

export AWS_S3_ACCESS_KEY=FOOBARFOOBAR
export AWS_S3_SECRET_KEY=foobarfoobarfoobarfoobarfoobar

如前所示,在application.properties文件中,添加;

srp.storage.s3.access-key=${AWS_S3_ACCESS_KEY}
srp.storage.s3.secret-key=${AWS_S3_SECRET_KEY}

然后正常启动。好多了。

【讨论】:

    【解决方案2】:

    如果您正在使用 gradle 并且有 bootRun 任务可用,那么您可以将任务配置为读取在运行任务时传递的参数。

    将以下内容添加到您的构建文件中。

    bootRun {
        if (project.hasProperty('params')) {
            args project.params.split(",")
        }
    }
    

    然后就可以运行下面的命令了。

    .\gradlew.bat bootRun -Pparams=--demo.prop=commandlinearg
    

    我有一个字段注释如下

    @Value("${demo.prop}")
    private String prop;
    

    【讨论】:

      猜你喜欢
      • 2021-08-23
      • 1970-01-01
      • 1970-01-01
      • 2016-06-08
      • 2016-11-15
      • 1970-01-01
      • 1970-01-01
      • 2020-04-04
      • 2019-12-17
      相关资源
      最近更新 更多