如何提供来自文件的 Spring Boot application.yml 属性值

发布于 2025-01-18 15:46:56 字数 318 浏览 0 评论 0原文

有没有办法从文件中提供春季启动属性值文本?我尝试了以下类似的事情,但它不起作用。

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-secret: classpath:./secrets/google-client-secret.txt
            client-id: classpath:./secrets/google-client-id.txt

秘密文件夹是在资源文件夹中创建的

Is there a way for providing spring boot properties value text from file? I tried something like below but it's not working.

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-secret: classpath:./secrets/google-client-secret.txt
            client-id: classpath:./secrets/google-client-id.txt

The secrets folder is created inside resources folder

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

月棠 2025-01-25 15:46:56

你实现这个的方式是不可能的。还有其他几种方法可以实现 外部化配置不过。

使用环境变量

在 IDE 中,您可以配置环境变量。如果环境变量的名称与属性的名称匹配,您可以从 application.yml 中删除参数。例如:

SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET=actual-secret
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID=actual-id

您还可以以不同的方式命名环境变量。例如:

GOOGLE_CLIENT_SECRET=actual-secret
GOOGLE_CLIENT_ID=actual-id

在这种情况下,您必须将 application.yml 更改为:

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-secret: ${GOOGLE_CLIENT_SECRET}
            client-id: ${GOOGLE_CLIENT_ID}

使用单独的 YAML 文件

另一种可能性是创建一个名为 secrets.yml 的文件,它包含您的实际值并将其放入 .gitignore 中。该解决方案最接近您想要的。

例如,在 secrets.yml 中,您可以输入:

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-secret: actual-secret
            client-id: actual-id

现在您可以使用 --spring.config.additional-location VM 参数加载它(也可以在您的 IDE 中进行配置) ):

java -jar myapp.jar --spring.config.additional-location=classpath:secrets.yml

使用 VM 参数

说到 VM 参数,您还可以将属性本身作为 VM 参数传递。

例如:

java \
  -jar myapp.jar \
  -Dspring.security.oauth2.client.registration.google.client-id=actual-id \
  -Dspring.security.oauth2.client.registration.google.client-secret=actual-secret

与环境变量一样,您可以使用较短的 VM 参数并在 application.yml 中引用它们。例如,使用 -Dgoogle.client-id=actual-id 并将 ${google.client-id} 放入 application.yml


还有其他几种提供外部化配置的方法,因此我建议您阅读我之前链接的文档。

The way you're implementing this is not possible. There are several other ways to implement externalized configuration though.

Using environment variables

In your IDE you can configure environment variables. If the names of the environment variables match the name of the property, you can remove the parameters from application.yml. For example:

SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_SECRET=actual-secret
SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_GOOGLE_CLIENT_ID=actual-id

You can also name your environment variables differently. For example:

GOOGLE_CLIENT_SECRET=actual-secret
GOOGLE_CLIENT_ID=actual-id

In that case, you have to change your application.yml to this:

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-secret: ${GOOGLE_CLIENT_SECRET}
            client-id: ${GOOGLE_CLIENT_ID}

Using a separate YAML file

Another possibility is to create a file called secrets.yml, make it contain your actual values and put it in .gitignore. This solution is the closest to what you want.

For example, in secrets.yml you can put:

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-secret: actual-secret
            client-id: actual-id

Now you can load it by using the --spring.config.additional-location VM argument (also configurable in your IDE):

java -jar myapp.jar --spring.config.additional-location=classpath:secrets.yml

Using VM arguments

Speaking of VM arguments, you can also pass the properties themselves as VM arguments.

For example:

java \
  -jar myapp.jar \
  -Dspring.security.oauth2.client.registration.google.client-id=actual-id \
  -Dspring.security.oauth2.client.registration.google.client-secret=actual-secret

Like with the environment variables, you can use shorter VM arguments and reference them in application.yml. For example by using -Dgoogle.client-id=actual-id and putting ${google.client-id} in your application.yml.


There are several other ways of providing externalized configuration, so I suggest you read the documentation I linked earlier.

音栖息无 2025-01-25 15:46:56

恐怕不可能这样做。

我建议您使用环境变量来实现这一目标:

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-secret: ${GOOGLE_CLIENT_SECRET}
            client-id: ${GOOGLE_CLIENT_ID}

这样,秘密将与环境相关,而不是绑定到YML文件。

I'm afraid that it is not possible to do that.

What I recommend you tho is to use environment variables to achieve that:

spring:
  security:
    oauth2:
      client:
        registration:
          google:
            client-secret: ${GOOGLE_CLIENT_SECRET}
            client-id: ${GOOGLE_CLIENT_ID}

This way the secrets will be tied to the environment and not into the yml file.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文