【发布时间】:2020-07-15 19:54:31
【问题描述】:
在我创建的一个本地项目中,用于测试将 Docker 参数传递给我的 Spring Boot application.properties 我在 application.properties 中:test.name=${name}
在应用程序中
@SpringBootApplication
public class RestServiceApplication {
@Value("${test.name}")
private String test;
public static void main(String[] args) {
SpringApplication.run(RestServiceApplication.class, args);
}
@Bean(name = "test")
public String getTest() {
return this.test;
}
}
我的 Dockerfile:
FROM openjdk:8-jdk-alpine
ARG NAME
ENV TEST_NAME=${NAME}
RUN echo $TEST_NAME
ARG JAR_FILE=target/*.jar
RUN echo JAR_FILE
ADD ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
使用sudo docker build -t gs-rest-service --build-arg NAME=Alex . 构建它这在本地可以正常工作
现在在另一个项目上我的application.properties:
bulk.api.username=${BULK_USERNAME}
bulk.api.password=${BULK_PASSWORD}
还有我的 Dockerfile:
FROM maven:3.6.0-jdk-8 AS build
ARG ARTIFACTORY_USER
ARG ARTIFACTORY_PASSWORD
WORKDIR /build
COPY . .
RUN mvn -s settings.xml clean package
ARG BULK_USERNAME
ARG BULK_PASSWORD
ENV BULK_API_USERNAME=${BULK_USERNAME}
ENV BULK_API_PASSWORD=${BULK_PASSWORD}
RUN echo $BULK_API_PASSWORD
FROM openjdk:8-jre-alpine
WORKDIR /opt/cd-graph-import
COPY --from=build /build/target/abc-svc.jar .
ENTRYPOINT ["java", "-jar", "abc-svc.jar"]
我的春季靴课:
@SpringBootApplication
public class SpringBootApplication {
@Value("${bulk.api.username}")
private String bulkApiUsername;
@Value("${bulk.api.password}")
private String bulkApiPassword;
public static void main(String[] args) {
SpringApplication.run(SpringBootApplication.class, args);
}
@Bean
public RestTemplate restTemplate() {
return new RestTemplateBuilder().basicAuthentication(bulkApiUsername, bulkApiPassword).build();
}
@Bean(name = "bulkApiUrl")
public String getBulkApiUrl() {
return this.bulkApiUrl;
}
}
当它在 gitlab 中运行时:
docker build -t $SERVICE_IMAGE --build-arg ARTIFACTORY_USER=$ARTIFACTORY_USER --build-arg ARTIFACTORY_PASSWORD=$ARTIFACTORY_PASSWORD --build-arg BULK_USERNAME=$BULKAPI_USERNAME --build-arg BULK_PASSWORD=$BULKAPI_PASSWORD .
我看到 $BULK_API_PASSWORD 设置正确,但是在运行应用程序时出现错误:`Error Creating bean with name
'someApplication': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'BULK_USERNAME' in value "${BULK_USERNAME}"
我错过了什么?
【问题讨论】:
-
只是一个细微的差别,但在工作情况下它是
${name}(小写!)..而非工作它是......大写! (请尝试这个简单的修复)..in application.properties 然后甚至可能不是${FOO_BAR},而是${foo.bar}。 -
不是这样的。我还替换了工作示例中的占位符,它仍然可以正常工作。
标签: spring-boot docker maven