java - Docker 映像无法读取 Spring Boot 应用程序上的 application.yml 文件
问题描述
我目前正在尝试对具有 2 个配置文件的 Spring Boot 应用程序进行 docker 化:
application-dev.yml和application-prod.yml
当我在我的机器上运行该应用程序时,它可以工作,但是当我尝试 dockerize 时,它无法从所述文件中读取。它不会将变量加载到@Value 注释中,即使服务端口是错误的。
19:30:24.437 [main] ERROR org.springframework.boot.SpringApplication - Application startup failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'basicContractService': Injection of autowired dependencies failed; nested exception is
java.lang.IllegalArgumentException: Could not resolve placeholder 'service.msisdn.address' in value "${service.msisdn.address}"
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:372)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1264)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:553)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:761)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:867)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:543)
at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:122)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:693)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:360)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:303)
at br.com.customer.service.userinfosearch.Swagger2SpringBoot.main(Swagger2SpringBoot.java:24)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.boot.loader.MainMethodRunner.run(MainMethodRunner.java:48)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:87)
at org.springframework.boot.loader.Launcher.launch(Launcher.java:50)
at org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51)
Caused by: java.lang.IllegalArgumentException: Could not resolve placeholder 'service.msisdn.address' in value "${service.msisdn.address}"
at org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:174)
at org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:126)
at org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:236)
at org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:210)
at org.springframework.context.support.PropertySourcesPlaceholderConfigurer$2.resolveStringValue(PropertySourcesPlaceholderConfigurer.java:172)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:831)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1066)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:585)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:366)
... 23 common frames omitted
这是我的码头文件:
FROM maven:3-jdk-11 AS builder
RUN mkdir -p /usr/local/backend
RUN chmod 777 /usr/local/backend/
ADD settings.xml /root/.m2/
COPY settings.xml /usr/share/maven/ref/
COPY pom.xml /usr/share/maven/ref/repository
COPY . /usr/local/backend
WORKDIR /usr/local/backend
RUN mvn clean generate-sources package
FROM openjdk:11
COPY --from=builder /usr/local/backend/target/service-userinfosearch.jar /usr/local/backend/
RUN chmod 777 /usr/local/backend/
WORKDIR /usr/local/backend
ENTRYPOINT ["java", "-jar", "service-userinfosearch.jar","-Dspring.profiles.active=dev"]
我正在使用此命令进行构建:
docker build . -t userinfosearch/v1
和这个一起运行:
docker run --rm --name version1 -p 8082:8082 userinfosearch/v1
解决方案
没办法,解决了。
将以下内容添加到运行命令中即可:
-e "SPRING_PROFILES_ACTIVE=dev"
推荐阅读
- sql - 划分数据记录
- python-3.x - 如果日期相同,如何从另一个数据框中填充列值
- file - 但是为什么我通过 `heroku ps:exec` 所做的更改没有生效?
- c# - EF6 缓慢的首次查询对部署的影响
- javascript - 水平条形图索引关闭
- tensorflow - 让 Tensorflow 自动检测和使用 XLA GPU
- postgresql - How do I compare two TIMESTAMP columns to check for a difference of at most 15 minutes?
- php - 如何让下面的代码先用php开始,再用html
- php - 如何使用php中的rest api将用户个人资料地址发送给followupboss
- android - 智能转换为“Int”是不可能的,因为“mViewModel.counter.value”是一个复杂的表达式