spring java.lang.IllegalArgumentException:无法解析Docker容器上的占位符

jckbn6z7  于 2024-01-05  发布在  Spring
关注(0)|答案(1)|浏览(170)

我有一个Sping Boot Backend,它在我的IntelliJ本地机器上运行得很好。
但是当我尝试在Docker容器上运行它时,我得到了这个错误

  1. 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}"
  2. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:555)
  3. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
  4. openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
  5. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
  6. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
  7. openbarber-backend-1 | at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:276)
  8. openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1391)
  9. openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
  10. openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
  11. openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
  12. openbarber-backend-1 | ... 32 common frames omitted
  13. openbarber-backend-1 | Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'mjmlSecrets.appId' in value "${mjmlSecrets.appId}"
  14. openbarber-backend-1 | at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:180)
  15. openbarber-backend-1 | at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
  16. openbarber-backend-1 | at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:239)
  17. openbarber-backend-1 | at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
  18. openbarber-backend-1 | at org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:191)
  19. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:936)
  20. openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1332)
  21. openbarber-backend-1 | at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1311)
  22. openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:887)
  23. openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:791)
  24. openbarber-backend-1 | at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:229)
  25. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1372)
  26. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1222)
  27. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:582)
  28. openbarber-backend-1 | at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
  29. openbarber-backend-1 | ... 41 common frames omitted
  30. openbarber-backend-1 exited with code 1

字符串
它似乎无法解析本例中的占位符的某些凭据。
application.yml中,凭据的配置如下

  1. mailCredentials:
  2. username: ${MAIL_USERNAME}
  3. password: ${MAIL_PASSWORD}
  4. mjmlSecrets:
  5. appId: ${MJML_APP_ID}
  6. appKey: ${MJML_APP_KEY}


凭证在.env文件中

  1. MAIL_USERNAME=yourMailUsername
  2. MAIL_PASSWORD=yourMailPassword
  3. MJML_APP_ID=yourMjmlAppId
  4. MJML_APP_KEY=yourMjmlAppKey


在docker-compose文件中,我也这样设置了环境变量

  1. version: '3.8'
  2. services:
  3. frontend:
  4. hostname: localhost
  5. build: ./Frontend
  6. ports:
  7. - "80:80"
  8. backend:
  9. build: ./Backend
  10. ports:
  11. - "8080:8080"
  12. depends_on:
  13. - db
  14. links:
  15. - db
  16. environment:
  17. - SPRING_DATASOURCE_URL=jdbc:postgresql://db:5432/openbarber
  18. - SPRING_DATASOURCE_USERNAME=postgres
  19. - SPRING_DATASOURCE_PASSWORD=admin
  20. - MJML_APP_ID=...
  21. - MJML_APP_KEY=...
  22. - MAIL_USERNAME=...
  23. - MAIL_PASSWORD=...
  24. env_file:
  25. - ./Backend/src/main/resources/.env


配置正确吗?我也试过mvn clean install

p5cysglq

p5cysglq1#

基于documentation关于设置环境变量。
.env文件是在容器中设置环境变量的默认方法。.env文件应放在项目目录的根目录下,紧挨着compose.yaml文件。
这是最好的办法。
但是如果你想在另一个地方声明它,你必须改变不在src/...中的位置。
更多的细节和例子,你可以在我给的参考文档中找到。

相关问题