我有一个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'
。
有可能吗?
谢谢
答案 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"