我有一个带有gradle的spring boot java应用程序和application.yml中的一些环境变量:
spring:
profiles: development
server:
port: 3100
database:
connectionString: mongodb://localhost:27017
---
spring:
profiles: production
server:
port: 80
database:
connectionString: prodCS
我的dockerfile:
FROM openjdk:8-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Dspring.profiles.active=development","-jar","/app.jar"]
我试图在本地运行docker但我的环境返回null属性
@Configuration
public class MongoUtilities {
@Resource
public Environment env;
private static String mongoUri;
@Bean
public static PropertySourcesPlaceholderConfigurer propertyPlaceHolderConfigurer() {
return new PropertySourcesPlaceholderConfigurer();
}
@Bean
public boolean ReadConnectionString() {
mongoUri = env.getProperty("database.connectionString");
System.out.println("Loaded connection Uri : " + mongoUri);
return true;
}
}
我之前遇到麻烦,环境变量为null,但设法修复它。它现在在intellij与旗帜--spring.profiles.active=development
完美运行
我正在使用gradlew build docker
构建并使用docker run springio/my-app
启动docker
这一切都很标准,我只是这个领域的初学者。
有任何想法吗?
好吧,我经理通过将我的application.yml添加到build.gradle中的docker来修复它:
docker {
dependsOn build
name "${project.group}/${bootJar.baseName}"
files bootJar.archivePath, 'application.yml'
buildArgs(['JAR_FILE': "${bootJar.archiveName}"])
}
然后我不得不使用dockerfile将application.yml复制到映像
COPY application.yml application.yml
然后我将spring的配置设置为我的application.yml
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom", "-Dspring.config.location=application.yml", "-jar","/app.jar"]
有几种方法可以做到这一点
ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=dev","-jar","/rest-api.jar"]
docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=dev" --name rest-api dockerImage:latest
我在 rest-api:
image: rest-api:0.0.1
ports:
- "8080:8080"
environment:
- "SPRING_PROFILES_ACTIVE=dev"
写过,你怎么能实现上述3种方法。