当前位置: 首页 > 知识库问答 >
问题:

SpringBoot项目,application.yml中的环境变量始终为空

徐奇逸
2023-03-14

我正在尝试运行一个使用Docker-Compose运行的SpringBoot项目。我使用docker-compose up启动了它的依赖项(Redis、MongoDB和RabbitMQ

我正在构建项目并使用以下命令运行它mvn clean package-dskiptests&mvn spring-boot:run

我总是犯这些错误:

在org.springframework.boot.autocigure.security.oauth2.client.oauth2restop erationsconfiguration$requestscopedconfiguration上处理条件时出错

原因:java.lang.IllegalArgumentException:无法解析值“${OAUTH_CLIENTID}”中的占位符“OAUTH_CLIENTID”

在docker-compose文件中,环境变量的值在environment部分中定义。

 environment:
      - RABBIT_HOST=rabbitstomp
      - RABBIT_USER=guest
      - RABBIT_PASS=user
      - MONGO_HOST=mongodb://localhost:27017
      - OAUTH_CLIENTID=nz-kek
      - OAUTH_CLIENT_SECRET=DzXZxeOZOJHFZIUhObSpsne
      - SSO_HOST=https://webweb.com
      - CORS_HOSTS=HOST1,HOST2
      - SES_HOST=ses
      - SES_PORT=6000
      - REDIS_HOST=localhost
      - REDIS_PORT=6379 

这就是application.yml的样子:

     spring.data.mongodb:
  database: ${DB_NAME} #notificationdb
  uri: ${MONGO_HOST}
security:
  oauth2:
    resource:
      jwk:
        key-set-uri: ${auth-server:${SSO_HOST}}/keys
      token-info-uri: ${auth-server:${SSO_HOST}}/userinfo
    client:
      client-id: ${OAUTH_CLIENTID}
          client-secret: ${OAUTH_CLIENT_SECRET}` 

我还尝试了mvn spring-boot:run-dspring-boot.run.arguments=--path.to.value=value1,但我不确定路径应该如何使用key-set-uri:${auth-server:${SSO_HOST}}/keys等变量

共有1个答案

拓拔弘化
2023-03-14

Spring支持通过PlaceHolderConfigurerSupport在配置中提供默认值。默认值是:后面的值。在你的情况下,你应该这样写:

client-id: ${OAUTH_CLIENTID:yourDevelopmentDefaultClientID}

如果您使用@value批注注入值,那么对于更复杂的情况,您可以支持SpEL使用#{someExpression}类型的表达式。

更新:

key-set-uri: ${SSO_HOST:auth-server}/keys

一些有趣的参考资料:https://www.baeldung.com/spring-value-defaults

 类似资料:
  • 我试图在spring boot应用程序中添加一个环境变量。属性文件。我知道如何在非spring启动项目中正常添加它,但我找不到用于添加环境变量的字段,这就是我所看到的。 这是我的application.properties文件,这可能会有帮助。

  • 在SpringBoot中读取环境变量的最佳方法是什么? 在Java中,我使用了以下方法: 是否可以使用注释来实现?

  • 我有sbt多项目,并尝试在子项目的中设置如下: 测试将中止,并显示以下消息: 在测试文件中,我试图得到如下值: Intellj提供如下设置环境变量: 如何设置一个环境变量在为也? 更新 根如下所示: 我还是有例外。

  • platformVersion和environment始终为空。在日志中:添加[class path resource[tests.properties]]PropertySource以最低的搜索优先级。我看到stackoverflow上的其他帖子(Autowired Environment是空的),我不想去实现EnvironmentAware。为环境而将私人改为公共并不能解决问题。任何其他想法都

  • 我需要我的应用程序应该从环境变量而不是应用程序中选择键的值。yml。 > 如果环境变量中不存在特定属性,则应从应用程序中选取值。yml,否则。

  • 本文向大家介绍SpringBoot+docker环境变量配置详解,包括了SpringBoot+docker环境变量配置详解的使用技巧和注意事项,需要的朋友参考一下 项目中遇到springBoot+docker需要配置不同环境变量的问题,做个简单的总结: 1.开发环境ide中启动项目 可以通过ide的环境变量参数配置,启动之后使用哪个配置,比如 这样就使用application-test.yml中的