开发者学堂课程【SpringBoot快速掌握 - 核心技术:Profile多环境支持 】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/612/detail/9228
Profile多环境支持
目录
一、 多 Profile 文件
二、 多 profile 文档块方式
三、 激活指定 profile
一、多 Profile 文件
Profile 其实是 Spring 用来做多环境支持的。因为在开发、测试、运行的时候,很可能这个配置文件会有一些变化。那么为了方便的切换环境,比如开发人员用开发环境,项目发布后用生产环境,测试期间用测试环境,为了方便的切换, Spring 提供了 Profile 功能。 Profile 功能怎么用呢?第一种在写配置文件的时候,配置文件后边可以-加上环境标识,所以第一种可以用多 Profile 文件的方式:
在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml ,带上 Profile 标识就可以动态切换。并且默认使用 application.properties 的配置。
举个例子:
在 appliction.properties 这个配置下:
server.port=8081
# idea, properties配置文件utf-8
# person
person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15
由 server.port=8081 可以看出主配置文件端口号是 8081。
写一个配置为 application-dev.properties 是在开发环境下,设置一个端口号为8082:server.port=8082。再写一个配置加上 profile 标识 application-prod.properties 叫做生产环境,设置一个端口号为80端口:server.port=80 。现在就相当于配置了不同环境的配置文件,那么默认取消的是哪个端口呢?来测试一下:启动 SpringBoot 应用来看它用的是哪个端口号:
package com.atguigu.springboot;
import ...
//@ImportResource(Locations = {"cLasspath : beans.xml"})
@SpringBootApplication
public class SpringBoot02ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(SpringBoot02ConfigApplication.class,args);
}
}
可以看到它现在使用的是默认的 8081 端口:Tomcat started on port(s):8081(http)。
二、yml 支持多文档块方式
如果用 yml 文件作为配置文件,它还有一个更简单的方式叫多文档块。
server:
port: 8081
spring:
profiles:
active: prod
---
server:
port: 8083
spring:
profiles: dev
---
server:
port: 8084
spring:
profiles: prod
#指定属于哪个环境
这里以 application.yml 作为主配置文件。以前需要写出两种配置文件在主配置文件激活,现在只写一个 yml 文件。
yml 文件有一种语法叫文档块,即当在用三个横线回车以后会发现:上边叫 document1 ,下边叫 document2 ,如果能再回车,那再在下边就是 document3 、 document4 等。因为能分成很多文档块,所以就用这些文档块来定义每一个数据。比如第二个文档块定义这个端口号为8083,第三个文档块定义为8084,但是8083可以写一个配置为 spring:profiles: dev ,是 dev 环境;8084配置为 spring:profiles: prod ,是 product 环境。这样就相当于为每一个文档块定义它是什么环境下的东西。激活则在上面的文档块激活,输入 spring:profiles:active: dev 激活 dev ,如果一切正常就是 Tomcat started on port(s):8083(http) 即8083端口。
切换激活 product:spring:profiles:active:prod 就是 Tomcat started on port(s):8084(http)8084 端口。
这就是使用 yml 里面的文档块模式,不需要写那么多的配置文件,就更简单了。
三、激活指定 profile
那么何时开发、测试、包括生产环境可以得到运行呢?
1. 在配置文件中指定 spring.profile.active=dev
在默认配置文件中输入 spring.profile.active=dev 激活开发环境,再次启动可以看到端口号变成了8082:Tomcat started on port(s):8082(http)。
server.port=8081
spring.profiles.active=dev
# idea, properties配置文件utf-8
# person
person.last-name=张三${random.uuid}
person.age=${random.int}
person.birth=2017/12/15
person.boss=false
person.maps.k1=v1
person.maps.k2=14
person.lists=a,b,c
person.dog.name=${person.hello:hello}_dog
person.dog.age=15
2.命令行
a):命令行参数激活,使用 --spring.profiles.active=dev。在 Edit Configurations... 里的 Program arguments 配置:-- spring.profiles.active=dev 运行,在运行的时候加了命令行参数,那么dev就相当于被激活了,虽然看着是运行 prod ,实际上在命令行里改掉了,所以这里是 Tomcat started on port(s):8083(http) 。即8083端口。
b):可以直接在测试的时候,配置传入命令行参数。由于项目最终会被打包,那么就把这个项目打包成 package ,打包完成在 target 目录下的一个 .jar 压缩包,在路径下输入 cmd ,用命令行的方式执行,输入 java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev 回车,指定用8083端口,则输出 Tomcat started on port(s):8083(http) 即8083端口。
3.虚拟机参数
在 Edit Configurations... 里的 VM options 里配置(-Dspring.profiles.active=dev ),依然指定dev,虽然外面指定 pord ,但是命令行指定 dev ,所以输出 Tomcat started on port(s):8083(http) 即8083端口。