我如何从Docker'run'命令设置Spring Boot属性

时间:2018-08-02 14:10:02

标签: spring docker spring-boot

我有一个Spring Boot应用程序,打算将其部署为Docker容器。

我正在使用DOCKERFILE构建带有入口点的图像:ENTRYPOINT ["java", "-jar", "myFolder/app.jar"]

将图像构建在JENKINSFILE中,如下所示: docker build . -t repo/app:latest

我正在使用脚本来运行docker映像。我想基于该脚本的参数设置自定义属性的值。

所以说我有一个自定义属性:custom.property.isTest=false。 它控制Bean应该返回哪个类的实例,例如

@Value("${custom.property.isTest:false}")
boolean isTest;

@Bean
public MyService myServiceImpl(){
    if(isTest) {
        return new myServiceTestImpl();
    } else {
        return new myServiceImpl();
    }
}

我希望能够在运行docker映像时设置此值。 例如,使用参数:-e做类似的事情(不起作用)'custom.property.isTest=true'。 有可能吗?

谢谢

3 个答案:

答案 0 :(得分:2)

是的,您可以像-e UPPERCASE_OF_YOUR_PROPERTY这样传递变量:

示例:

docker run -d --name servie-name -e CUSTOM_PROPERTY_ISTEST=true  -p port:port image:tag

答案 1 :(得分:1)

您有很多选择。我建议阅读Externalized Configuration section的Spring Boot文档。我只复制相关选项:

  
      
  • 主目录中的Devtools全局设置属性(当devtools处于活动状态时,〜/ .spring-boot-devtools.properties)。
  •   
  • 命令行参数。
  •   
  • SPRING_APPLICATION_JSON(嵌入在环境变量或系统属性中的嵌入式JSON)中的属性。
  •   
  • Java系统属性(System.getProperties())。
  •   
  • OS环境变量。
  •   
  • 打包的jar之外的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)。
  •   
  • 打包在jar中的特定于配置文件的应用程序属性(application- {profile} .properties和YAML变体)。
  •   
  • 打包的jar之外的应用程序属性(application.properties和YAML变体)。
  •   
  • 打包在jar中的应用程序属性(application.properties和YAML变体)。
  •   

答案 2 :(得分:0)

在docker文件中,您运行命令...java -jar myapp.jar...的位置应该能够传递-Dcustom.property.isTest=false。如果您可以提供docker文件的代码段,将很有帮助。参数可能用引号引起来(例如CMD java -jar myapp.jar "-DisTest=false"