QUESTION:如何对gradle task进行环境隔离?
-
Q1:spring-Boot中明明提供了profile进行环境隔离的方式,我们为啥不适用profile进行gradle task的环境隔离呢?
-
A1:我们肯定不会使用profile进行隔离
-
R1:profile不同环境的属性起作用的过程:
- 运行Application
- Application首先去
application.properties
文件中加载配置属性。在spring.profiles.active=**
得知当前application运行的环境 - 然后根据环境名,获取对应的环境的profile文件中的配置。
- 这时候才开始执行代码
因此--> spring-boot-profiles仅仅作用于应用运行阶段
R2:任何一个
gradle task
都可以独立于application被运行,甚至运行application的 仅仅包含在一个build
或者是bootRun task
而已。
因此-->我们必须专门为gradle的task运行做环境分离的配置。也就是,我们需要在某一个task运行之前获取当前环境,并且加载对应环境的配置option
-
-
Q2:我们该如何为每一个gradle task加载配置呢?
-
A2: gradle提供了gradle.properties专门用来写配置。
- Note:如果你仅仅在项目的根目录下面存放一个gradle.properties文件,就会在每一个gradle task运行的时候直接加载gradle.properties中的配置。
-
Q3:如何使用gradle 的properties文件做环境隔离呢?
-
A3:gradle提供了方式,但是需要插件支持:
- 首先:需要在项目的根目录下创建
gradle-**.properties
文件而这里的**
指的是:evironmentName` - 其次:需要在
settings.gradle
中加入插件id 'net.saliman.properties' version '1.4.2'
才能进行根据环境设定选择不同属性进行加载。 - 运行task的时候执行指令中,需要带环境名字
gradle myTask -PenvironmentName=dev
- 首先:需要在项目的根目录下创建
Q4:使用profile进行环境隔离方式,使用的application-dev.properties可以修改为yml文件,那么能够将gradle-dev.properties修改成gradle-dev.yml吗?
- A4:尝试后发现不行,gradle take运行的时候只能识别gradle-*.properties文件。