SpringBoot+docker环境变量配置详解

 更新时间:2020年10月22日 11:23:27   作者:xiaoguangtouqiang  
这篇文章主要介绍了SpringBoot+docker环境变量配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

项目中遇到springBoot+docker需要配置不同环境变量的问题,做个简单的总结:

1.开发环境ide中启动项目

可以通过ide的环境变量参数配置,启动之后使用哪个配置,比如

这样就使用application-test.yml中的配置

2.通过gradle打包

可以通过-P参数来指定打包后的jar使用哪种环境来运行,比如

gradlew -Pprod bootWar

打包之后运行会使用prod中的配置;我的项目是jhipster生成出来的,现在需要添加test的环境配置,需求修改下项目的gradle文件,如下所示

添加一种属性配置,这里举例期间使用“aaatest”,这样打包测试环境的时候命令为:

gradlew -Paaatest bootWar

同时需要添加一个profile_test.gradle,可以拷贝一份prod的,然后修改下这个地方即可

def profiles = 'test'

具体的原理其实就是在打包的时候根据打包命令中的参数,判断当前是什么环境,如果是test环境,那么就替换掉application.yml中的#spring.profiles.active#参数为test,具体代码如下所示:

processResources {
  filesMatching('**/application.yml') {
    filter {
      it.replace('#project.version#', version)
    }
    filter {
      it.replace('#spring.profiles.active#', profiles)
    }
  }
}

在application.yml中可以看到这里是有个占位符的

3.docker打包

这里通过docker-compose来把应用打包成docker镜像的,这里可以通过指定环境变量参数

这个参数是会覆盖gradle中参数的,就是说即便你指定了gradlew bootWar -Pprod buildDocker,但是你docker-compose文件中的参数是active,那么docker启动的时候已然会使用test的环境配置;在这个地方也是卡了蛮久的;当然,docker还可以通过修改dockerFile的启动命令

java -Djava.security.egd=file:/dev/./urandom -Dspring.profiles.active=dev -jar rest-api.jar

或者通过docker run命令启动镜像的时候把参数加载进去

docker run -d -p 8080:8080 -e "SPRING_PROFILES_ACTIVE=dev" --name rest-api dockerImage:latest

到此这篇关于SpringBoot+docker环境变量配置详解的文章就介绍到这了,更多相关SpringBoot docker环境变量内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决for循环为空不需要判断的问题

    解决for循环为空不需要判断的问题

    这篇文章主要介绍了解决for循环为空不需要判断的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-09-09
  • Java中的三种校验注解的使用(@Valid,@Validated和@PathVariable)

    Java中的三种校验注解的使用(@Valid,@Validated和@PathVariable)

    本文主要介绍了Java中的三种校验注解的使用(@Valid,@Validated和@PathVariable),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-04-04
  • Java如何通过反射方式生成数据库实体类

    Java如何通过反射方式生成数据库实体类

    这篇文章主要介绍了Java如何通过反射方式生成数据库实体类问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • java的==运算符和equals操作详解

    java的==运算符和equals操作详解

    在Java中,==和equals都是用于比较两个对象的操作符,但它们的行为和用途有所不同,这篇文章主要介绍了java的==运算符和equals的相关知识,需要的朋友可以参考下
    2024-08-08
  • Spring核心方法refresh的使用解析

    Spring核心方法refresh的使用解析

    这篇文章主要介绍了Spring核心方法refresh的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • java实现文件的上传功能

    java实现文件的上传功能

    这篇文章主要为大家详细介绍了java实现文件的上传功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • java实现table添加右键点击事件监听操作示例

    java实现table添加右键点击事件监听操作示例

    这篇文章主要介绍了java实现table添加右键点击事件监听操作,结合实例形式分析了Java添加及使用事件监听相关操作技巧,需要的朋友可以参考下
    2018-07-07
  • Springboot升级到2.7.2结合nacos遇到的坑及解决

    Springboot升级到2.7.2结合nacos遇到的坑及解决

    这篇文章主要介绍了Springboot升级到2.7.2结合nacos遇到的坑及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • 深入浅析Java Object Serialization与 Hadoop 序列化

    深入浅析Java Object Serialization与 Hadoop 序列化

    序列化是指将结构化对象转化为字节流以便在网络上传输或者写到磁盘永久存储的过程。下面通过本文给大家分享Java Object Serialization与 Hadoop 序列化,需要的朋友可以参考下
    2017-06-06
  • java中for循环删除集合陷阱

    java中for循环删除集合陷阱

    java中在增强for循环为什么不能增删集合呢?一个循环迭代,跟集合的增删改没什么关系。修改集合不是for去做的。for只管循环迭代,你在循环里边修改集合,改变集合的长度,顺序对循环都有影响
    2015-05-05

最新评论