Springboot使用Maven Profile和Spring Profile进行多环境配置

目的

在实际的项目上,一般会分三种环境dev、test、prod来方便我们的开发和部署,要求我们在开发的时候可以方便地进行环境的切换,又要满足在发布版本的时候可以尽可能减少测试人员的配置。

Spring Profile

多环境

为了实现多环境配置,我们可以在本地开发的时候在Resource文件夹下新建不同环境的配置文件,如下图所示:

image

这时候我们只需要在主配置文件application.yml文件使用spring.profiles.active = dev/test/prod来进行不同环境的切换

spring:profiles:active: dev #加载dev配置文件

经过上述步骤,我们即可在本地开发时根据不同的环境进行测试。

主配置文件与不同环境的配置文件

Spring Profile有一个特性即可以在application.yml配置通用的内容,在application-dev.yml文件中配置不同文件的差异化配置,这样可以精简我们的配置文件。配置如下:

# 主配置文件主要用来存放公共设置,不受环境配置影响
server:port: 8082 # 指定端口号context-path: /server # 指定访问资源的根路径
spring:profiles:active: dev

dev配置文件

# 主要用来存放不同环境差异化配置,包括ftp地址、数据库连接等
spring:datasource:username: xxxpassword: xxxurl: xxxdriver-class-name: oracle.jdbc.driver.OracleDriver

上述解决方案虽然可以解决我们的环境问题,但是不够优雅,还有一些值得优化的地方,比如打包出的配置文件有四个、每次需要手动修改主配置文件的环境信息等。

Maven Profile

Profile配置

Maven 也提供了 Profile 支持,它允许我们在 pom.xml 中定义多个 Profile ,每个 profile 可以指定自己的一些配置、依赖、触发条件等。例如:

<profiles><profile><id>dev</id><activation><activeByDefault>true</activeByDefault></activation><properties><profile.active>dev</profile.active></properties></profile><profile><id>prod</id><properties><profile.active>prod</profile.active></properties></profile>
</profiles>

按照上述的配置,我们配置了dev/test/prod三种配置并默认选择dev环境。

资源过滤

在进行打包的时候,我们并不需要把dev或者test等配置文件打包进行,所有我们在打包的时候进行如下配置

<build><resources><resource><directory>src/main/resources</directory><!--先排除所有的配置文件--><excludes><exclude>application*.yml</exclude></excludes></resource><resource><directory>src/main/resources</directory><!--引入所需环境的配置文件--><filtering>true</filtering><includes><include>application.yml</include><include>application-${profile.active}.yml</include></includes></resource></resources><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><classifier>exec</classifier></configuration></plugin></plugins></build>

主要是分为两个步骤:

  1. 先排除所有的配置文件
  2. 引入我们所需要的配置文件,根据${profile.active}来动态指定

熟悉idea的同学都知道,这里的${profile.active}我们在idea的maven的配置处进行快速的切换。

image

从上面的配置文件可以看出,我们引入了两个配置文件,一个是主配置文件(application.yml),一个是实际环境(application-dev.yml)的配置文件,但是到这里还没有结束。我们知道主配置文件的dev/test/prod在没有使用Maven Profile的时候,我们是需要手动修改的,但是使用Maven Profile之后,我们可以把这个工作交给maven去做。

在application.yml进行下面的修改:

spring:profiles:active: @profile.active@ #此处由maven的环境选择决定

这样我们就可以完全把配置文件的指定和生成交给maven。

Spring Profile与Maven Profile具体使用

配置如下:

# 主配置文件主要用来存放公共设置,不受环境配置影响
server:port: 8082 # 指定端口号context-path: /server # 指定访问资源的根路径
spring:profiles:active: @profile.active@ #此处由maven的环境选择决定

Springboot使用Maven Profile和Spring Profile进行多环境配置相关推荐

  1. Maven profile整合Spring profile

    在Maven和Spring中,都有profile这个概念.profile是用于区分各种环境的,例如开发环境.测试环境.正式环境等.Maven的profile用于在打包时根据指定环境替换不同环境的配置文 ...

  2. 学习spring1--跟我一起学Spring 3(2)–开发环境配置

    http://www.importnew.com/13185.html#spring 首页 所有文章 资讯 Web 架构 基础技术 书籍 教程 我要投稿 更多频道 » - 导航条 -首页所有文章资讯W ...

  3. Maven(一):安装与环境配置、使用Maven搭建web项目

    相关阅读: Maven(一):安装与环境配置.使用Maven搭建web项目 Maven(二):常用命令.依赖管理 Maven(三):将web项目的war包热部署到远程Tomcat服务器 Maven(四 ...

  4. Spring中yml多环境配置

    使用yml执行多环境的配置 spring: profiles: active: - dev spring: profiles: dev #开发环境 application: name: springc ...

  5. 基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置

    [0]README:本文旨在给出可以正常跑 测试用例的项目依赖配置, 同时还会给出 maven 编译项目时的坑儿: [1] pom配置: <project xmlns="http:// ...

  6. Spring Boot 打包不同环境配置与 Shell 脚本部署

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 本篇和大家分享的是 Spring Boot 打包并结合 S ...

  7. Springboot使用Maven项目使用 Profiles和Spring Profile进行多环境配置 动态激活指定

    最终效果:①:IDEA右边"maven"的工具栏 ②:项目配置的多环境选项入口[默认:dev] ③:项目配置的多环境配置文件 ④:选择②操作后编译生成的配置文件[去除其它环境配置文 ...

  8. maven工程的多环境配置方案(profile)

    前言: 写一篇水文来打发下时间吧^_^. 在应用开发中, 总会遇到开发/测试/预发布/线上环境, 其环境不同, 其具体的配置项也有所不同, 因此如何快速的切换各个环境配置, 进行打包配置, 成了一个小 ...

  9. springBoot配置spring.profiles.active多环境

    spring.profiles.active多环境配置 springBoot动态配置多环境(dev/test/prod)数据信息读取 pom文件配置 YAML文件配置 springBoot动态配置多环 ...

最新文章

  1. Navicat 12连接MySQL8服务器
  2. html5代码大全文库,HTML颜色代码表
  3. python打包成exe闪退_脚本程序打包后,黑框一闪而过,程序不能运行
  4. Java面试题中高级,神策数据Java面试题
  5. 计算机基础——原码、反码、补码转换
  6. 【视频】vue指令之v-else-if
  7. C语言里面邻接表的创建
  8. 手机前端框架UI库(Frozen UI、WeUI、SUI Mobile)
  9. java反编译jar包并修改class文件重新打包
  10. 我有一壶酒,足以慰风尘
  11. read函数和write函数的使用
  12. 2023年全国最新二级建造师精选真题及答案52
  13. 百度云盘上传有大小限制 微信文件上传有大小限制 怎么破?
  14. 高等数学Mathematica实验题——2.2 - 17.根号2的连分式展开(Expansion of square 2)
  15. Opencv-python 色相饱和度(HLS)
  16. 如何把oracle11g卸载干净
  17. 医药板块企稳“回春”
  18. Failed connect to github-production-release-asset-2e65be.s3.amazonaws.com:443; 连接超时
  19. 浪漫约定的守护者——微软最有价值专家余勇
  20. 主流nosql数据库对比

热门文章

  1. 2022-2028年中国装配式装修行业市场研究及前瞻分析报告
  2. zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器
  3. 2022-2028年中国铁路行业投资分析及前景预测报告(全卷)
  4. 不要为了面子伤了自己
  5. Pytorch的默认初始化分布 nn.Embedding.weight初始化分布
  6. Java集合之并发容器
  7. LeetCode简单题之通过翻转子数组使两个数组相等
  8. LeetCode简单题之棒球比赛
  9. php 正则中文匹配
  10. RxJava 基础的使用