原文地址为https://www.cnblogs.com/haixiang/p/12451703.html,转载请注明出处!

Profile用法

我们在application.yml中为jdbc.username赋予一个值,这个值为一个变量

jdbc:
username: ${jdbc.username}

Maven中的profiles可以设置多个环境,当我们选择a环境后, <jdbc.username>内的值将替换上述配置文件中的变量

 </profiles>
<profile>
<id>a</id>
<properties>
<jdbc.username>root</jdbc.username>
</properties>
<!-- 默认使用此环境 -->
<activation>
<activeByDefault>true</activeByDefault>
</activation>
</profile>
</profiles>

我们查看编译后的application.yml文件,果然变量已经被赋值。我们猜想是否可以利用Profile的这一特性设置开发、测试、生产环境,选择不同环境时使用不同变量,配合Resources和Filter来指定打包内容以及替换变量。

jdbc:
username: root

resources

用来操作编译文件

filters

过滤器,设置过滤器的资源将会对同名变量进行赋值(被赋值的资源文件需要设置filtering为true)

多环境配置解决方案

网上大多数都是分为application-dev.xml、application-test.xml、application-prod.xml三个文件,可是我们在真实项目开发中,将会用到很多各式各样的文件(例如log4j的配置文件),它们在不同环境中应该也是不同的配置,不能在测试和生产环境使用同一个配置文件。所以我们将分为三个文件夹分别代表开发环境、测试环境、生产环境,他们里面的配置文件种类一致但是内容不一样。选择完当前环境后,打的jar包只包含当前环境文件夹下的配置文件。

├─main
│ ├─java
│ │ └─......
│ └─resources
│ ├─dev
│ │ └─config
│ │ │ └─mq.yml
│ │ │ └─redis.yml
│ │ └─application-dev.yml
│ ├─prod
│ │ └─config
│ │ │ └─mq.yml
│ │ │ └─redis.yml
│ │ └─application-prod.yml
│ └─test
│ │ └─config
│ │ │ └─mq.yml
│ │ │ └─redis.yml
│ │ └─application-test.yml
│ └─application.yml
│ └─a.xml
└─test
└─java
└─......

dev下的config下的mq.yml

mq: mq-dev

dev下的config下的redis.yml

redis: redis-dev

dev下的application-dev.yml

profiles.active:
dev
port: dev-port

application.yml

spring:
profiles:
active: ${profiles.active} port: ${port}

查看编译后的结果

其中application.yml中变量已经被替换为

spring:
profiles:
active: dev
port: dev-port

完整的pom.xml

    <build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<version>3.1.0</version>
<!--使用默认的变量分割符即${}-->
<configuration>
<useDefaultDelimiters>true</useDefaultDelimiters>
</configuration>
</plugin>
</plugins> <!-- 测试文件的编译路径设置 -->
<testResources>
<testResource>
<!--这里是关键! 根据不同的环境,把对应文件夹里的配置文件打包-->
<directory>src/main/resources</directory>
<includes>
<include>application.yml</include>
</includes>
<filtering>true</filtering>
</testResource> <testResource>
<!--这里是关键! 根据不同的环境,把对应文件夹里的配置文件打包-->
<directory>src/main/resources/${profiles.active}</directory>
<includes>
<include>**/*.yml</include>
</includes>
<filtering>false</filtering>
</testResource>
</testResources> <resources>
<resource>
<!--打包该目录下的 application.yml -->
<directory>src/main/resources</directory>
<includes>
<include>application.yml</include>
</includes>
<!-- 启用过滤 即该资源中的变量将会被过滤器中的值替换 -->
<filtering>true</filtering>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
<resource>
<!-- ${profiles.active}由profile提供 -->
<directory>src/main/resources/${profiles.active}</directory>
<includes>
<include>**/*.yml</include>
</includes>
<filtering>false</filtering>
</resource> </resources> <!-- 定义 filter,即该资源中的值将会用来替换同名属性(设置 filtering 为 true 的资源中的属性)-->
<filters>
<filter>
src/main/resources/${profiles.active}/application-${profiles.active}.yml
</filter>
</filters>
</build> <profiles>
<profile>
<!-- 本地开发环境 -->
<id>dev</id>
<properties>
<profiles.active>dev</profiles.active>
</properties>
<activation>
<activeByDefault>true</activeByDefault>
</activation> </profile> <profile>
<!-- 测试环境 -->
<id>test</id>
<properties>
<profiles.active>test</profiles.active>
</properties>
</profile> <profile>
<!-- 生产环境 -->
<id>prod</id>
<properties>
<profiles.active>prod</profiles.active>
</properties>
</profile>
</profiles>

最新文章

  1. Kinect开发文章目录
  2. Entity Framework Code First属性映射约定
  3. LPTHW 笨办法学python 33章
  4. 【HTML5】HTML5本地数据库(Web Sql Database)
  5. 配置eclipse使能打开当前文件所在目录
  6. Android项目——短信发送器
  7. sublime3的licence(update 2016-04-14)
  8. svn 常用操作命令
  9. ADO .NET 链接 增删改查
  10. 线程同步 Lock接口
  11. linux下通过acl配置灵活目录文件权限(可用于ftp,web服务器的用户权限控制)
  12. dfa最小化,上一个版本采用的是moore的打表法,这个版本采用的是hopcroft的方法,但是实现中采用链表而不是栈来优化。
  13. mcollective安装过程
  14. 给自己加油,一定要学会MFC!
  15. win10 Incredibuild 兼容
  16. 【易语言学习】Day1
  17. 头部banner根据网址高亮
  18. Dom 兼容处理
  19. Swift学习笔记8--Optional Chaining
  20. web.xml中的load-on-startup

热门文章

  1. 《C程序设计语言》练习 1-6,1-7
  2. 67)PHP,cookie的基本使用和基本原理
  3. spring mvc 页面form提示语
  4. Web of science|SCIE|影响因子|SSCI|高被引论文|领域中热点论文|
  5. 一些JavaScript中原理的简单实现
  6. 关于HTTP协议与HTTP状态码的简要介绍
  7. Flask从负到零的一周
  8. Leetcode回溯相关题目Python实现
  9. (一)mybatis简易搭建
  10. python爬取许多图片的代码