1 多环境化配置
在真实的应用中,常常会有多个环境(如:开发,测试,生产等),不同的环境数据库连接都不一样,这个时候就需要用到 spring.profile.active
的强大功能了,它的格式为 application-{profile}.properties/yml
,这里的 application
为前缀不能改,{profile} 是我们自己定义的。
Profile 是 Spring 对不同环境提供不同配置功能的支持,可以通过激活、 指定参数等方式快速切换环境。
1.1 创建 HelloController
package com.snow.snow_springboot;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
*
* 第一个Controller测试类
*
* @author: yang
* @Date:
* @Description:
* @version v1.0
*/
@RestController
public class HelloController {
@RequestMapping("/hello")
public String sayHello() {
return "hello, spring boot!";
}
}
1.2 创建 application-dev.yml
、 application-test.yml
、 application-prod.yml
,内容分别如下
application-dev.yml
server:
servlet:
context-path: /dev
application-test.yml
server:
servlet:
context-path: /test
application-prod.yml
server:
servlet:
context-path: /prod
在 application.yml
配置文件中写入
server:
port: 8081
spring:
profiles:
active: dev
这个时候我们在次访问 http://localhost:8081/hello 就没用处了,因为我们设置了它的 context-path=/dev
,所以新的路径就是 http://localhost:8081/dev/hello ,由此可以看出来我们激活不同的配置读取的属性值是不一样的。
2 三种激活方式:
- 配置文件
spring:
profiles:
active: dev
- 命令行
--spring.profiles.active=test
浏览器输入 http://localhost:8081/dev/hello
浏览器输入 http://localhost:8081/test/hello
-
jvm 参数
-Dspring.profiles.active=test
-
打成 Jar 包后运行
java -jar spring-boot-02-config-0.0.1-SNAPSHOT.jar --spring.profiles.active=dev
3 yml 的多文档块方式
不用添加上面的三个 yml 文件,直接在 核心配置文件里面配置
server:
port: 8081
spring:
profiles:
active: dev
--- # 三个短横线分割多个 profile 区(文档快)
spring:
profiles: dev
server:
servlet:
context-path: /dev
---
spring:
profiles: test
server:
servlet:
context-path: /test
---
spring:
profiles: prod
server:
servlet:
context-path: /prod
4 外部命令引导
假设这样的场景,我们对已经开发完成的代码打包发布,期间在测试环境测试通过了,那么即可发布上生产,这个时候是修改 application.properties
的配置方便还是直接在命令参数配置方便呢,毫无疑问是后者更有说服力。默认情况下, SpringApplication
会将命令行选项参数(即: –property
,如 –server.port=9000
)添加到 Environment
,命令行属性始终优先于其他属性源。
测试:
进入到项目目录,此处以我本地目录为主:D:/ylx/springboot/
然后打开 cmd 程序,输入:mvn package
打包完毕后进入到:D:/ylx/springboot/ 目录中去,我们可以发现一个名为springboot-0.0.1-SNAPSHOT.jar 的包
接着在打开 cmd 程序,输入:java -jar springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=test --my1.age=32。仔细观察spring.profiles.active=test、my1.age=32 这俩配置的键值是不是似曾相识(不认识的请从开头认真阅读)
最后输入测试地址:http://localhost:8080/test/config/test 我们可以发现返回的JSON变成了 {“age”:32,“name”:“battcn”} 表示正确