簡體   English   中英

docker中的SpringBoot環境為null

[英]SpringBoot environment is null in docker

我有一個帶有gradle的springboot 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之前遇到過麻煩,但是設法解決了這個問題。 現在,它在帶有標志--spring.profiles.active=development intellij中可以完美運行

我正在使用gradlew build docker docker run springio/my-app進行gradlew build docker並使用docker run springio/my-app

這都是很標准的,我只是這個領域的初學者。

有任何想法嗎?

好的,我已經通過將我的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"]

有兩種方法可以做到這一點

  • 在Dockerfile中傳遞Spring配置文件

     ENTRYPOINT ["java", "-Djava.security.egd=file:/dev/./urandom","-Dspring.profiles.active=dev","-jar","/rest-api.jar"] 
  • 在Docker運行命令中傳遞Spring Profile

      docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=dev" --name rest-api dockerImage:latest 
  • 在DockerCompose中傳遞Spring配置文件

      rest-api: image: rest-api:0.0.1 ports: - "8080:8080" environment: - "SPRING_PROFILES_ACTIVE=dev" 

我已經在這里詳細介紹了如何實現以上三種方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM