我有一个Sping Boot Backend,它在我的IntelliJ本地机器上运行得很好。
但是当我尝试在Docker容器上运行它时,我得到了这个错误
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'emailSenderService' defined in URL [jar:file:/app/Backend-0.0.1-SNAPSHOT.jar!/com/hdmstuttgart/mi/backend/service/EmailSenderService.class]: Unexpected exception during bean creation; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'mjmlSecrets.appId' in value "${mjmlSecrets.appId}"
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:555)
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
openbarber-backend-1 | at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
openbarber-backend-1 | ... 32 common frames omitted
openbarber-backend-1 | Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'mjmlSecrets.appId' in value "${mjmlSecrets.appId}"
openbarber-backend-1 | at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180)
openbarber-backend-1 | at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
openbarber-backend-1 | at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239)
openbarber-backend-1 | at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
openbarber-backend-1 | at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:191)
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936)
openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1332)
openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
openbarber-backend-1 | ... 41 common frames omitted
openbarber-backend-1 exited with code 1
字符串
它似乎无法解析本例中的占位符的某些凭据。
在application.yml
中,凭据的配置如下
mailCredentials:
username: ${MAIL_USERNAME}
password: ${MAIL_PASSWORD}
mjmlSecrets:
appId: ${MJML_APP_ID}
appKey: ${MJML_APP_KEY}
型
凭证在.env
文件中
MAIL_USERNAME=yourMailUsername
MAIL_PASSWORD=yourMailPassword
MJML_APP_ID=yourMjmlAppId
MJML_APP_KEY=yourMjmlAppKey
型
在docker-compose文件中,我也这样设置了环境变量
version: '3.8'
services:
frontend:
hostname: localhost
build: ./Frontend
ports:
- "80:80"
backend:
build: ./Backend
ports:
- "8080:8080"
depends_on:
- db
links:
- db
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/openbarber
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_PASSWORD=admin
- MJML_APP_ID=...
- MJML_APP_KEY=...
- MAIL_USERNAME=...
- MAIL_PASSWORD=...
env_file:
- ./Backend/src/main/resources/.env
型
配置正确吗?我也试过mvn clean install
1条答案
按热度按时间p5cysglq1#
基于documentation关于设置环境变量。
.env
文件是在容器中设置环境变量的默认方法。.env
文件应放在项目目录的根目录下,紧挨着compose.yaml
文件。这是最好的办法。
但是如果你想在另一个地方声明它,你必须改变不在
src/...
中的位置。更多的细节和例子,你可以在我给的参考文档中找到。