【发布时间】:2019-10-29 04:13:03
【问题描述】:
我正在尝试运行一个使用 docker-compose 运行的 SpringBoot 项目。我使用docker-compose up 开始了它的依赖项(Redis、MongoDB 和 RabbitMQ)
我正在构建项目并使用这些命令运行它
mvn clean package -DskipTests && mvn spring-boot:run
我一直有这些错误:
Error processing condition on org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2RestOp erationsConfiguration$RequestScopedConfiguration
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'OAUTH_CLIENTID' in value "${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}`
那么在没有 docker-compose 的情况下运行项目时,我应该将值放在 application.yml 中吗?
我也试过mvn spring-boot:run -Dspring-boot.run.arguments=--path.to.value=value1,但我不确定路径应该如何与key-set-uri: ${auth-server:${SSO_HOST}}/keys等变量一起使用
【问题讨论】:
-
你在运行docker,但是在本地启动Spring Boot……那应该怎么看docker环境变量呢?
-
该应用程序应该以
docker-compose启动,并且环境变量在我原来的帖子中提到的docker-compose 文件中定义。我要问的是,在将应用程序作为 Spring Boot 应用程序启动时(使用mvn spring-boot:run或java -jar),是否可以传递这些参数,例如key-set-uri: ${auth-server:${SSO_HOST}}/keys。 -
它们可用,但要在 docker 容器内运行(并且您不应该使用
mvn spring-boot:run插入容器来启动应用程序)。从我在这里看到的情况来看,您只是使用 docker 启动外部依赖项并在本地运行您的应用程序。 -
当我使用
mvn spring-boot:run时,它不在容器内。我在我的电脑上本地运行它。我使用 Intellij 或终端构建项目。 -
因此它不会工作,因为那些环境变量不存在。这些仅在 docker 内部可用。变量的名称是
sso-host或SSO_HOST,就像您声明它们一样(Spring BOot 有一些宽大处理,因此两者都应该工作)。
标签: maven spring-boot docker-compose environment-variables