小知识,大挑战!本文正在参与“程序员必备小知识”创作活动
SpringBoot使用一个全局的配置文件核心配置文件,配置文件名在约定的情况下名字是固定的。
两种配置文件的格式
在SpringBoot框架中,resource文件夹里可以存放配置的文件有两种:properties和yml。
properties
扁平的K/V格式。
server.port=80
server.servlet.context-path=/springboot
yml
树形结构。建议使用这种,可读性更强。
server:
port: 80
servlet:
context-path: /springboot
默认.yml的优先级高于.properties。两种文件可以使用配置文件在线转换网站进行相互转换。
基本语法
k:(空格)v:表示一对键值对(空格必须有)以空格的缩进来控制层级关系;只要是左对齐的一列数据,都是同一个层级的属性和值也是大小写敏感;如果有特殊字符% & 记得用单引号(‘)包起来。
外部约定文件加载顺序
springboot 启动还会扫描以下位置的application.properties或者application.yml文件作为Spring boot的默认配置文件。
-
classpath根目录下
-
classpath根config/
-
项目根目录
-
项目根目录/config
-
直接子目录/config
java ‐jar configuration_file‐0.0.1‐SNAPSHOT.jar ‐‐spring.config.location=/路径
profile文件的加载
我们在开发应用时,通常一个项目会被部署到不同的环境中,比如:开发、测试、生产等。其中每个环境的数据库地址、服务器端口等等配置都会不同,对于多环境的配置,大部分构建工具或是框架解决的基本思路是一致的,通过配置多份不同环境的配置文件,再通过打包命令指定需要打包的内容之后进行区分打包。
yml支持多模块文档块
server:
port: 8081
servlet:
context-path: /springboot
spring:
profiles:
active: dev
---
开发环境配置
server:
port: 8082
servlet:
context-path: /springboot-dev
---
生产环境配置
server:
port: 8083
servlet:
context-path: /springboot-prod
多yml/properties文件环境切换
application-dev.yml
server:
port: 8082
servlet:
context-path: /springboot-dev
application-prod.yml
server:
port: 8083
servlet:
context-path: /springboot-prod
激活指定环境配置的3种方法如下:
-
直接在application.yml的配置文件中使用 spring.profiles.active=dev|prod
-
设置虚拟机参数 -Dspring.profiles.active=dev|prod
-
命令行参数启动(打成Jar包时候) java -jar springboot-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
自定义属性
application.properties提供自定义属性的支持,我们可以把一些常量配置在这里。
user.username=username
user.password=password
然后使用@Value注解获取即可使用,和以前使用方式还是一样。
@RestController
public class UserController {
@Value("user.username")
private String username;
@Value("user.password")
private String password;
@RequestMapping("/user")
public String userInfo() {
return "姓名:" + username + " 密码:" + password;
}
}
有的时候属性太多了,一个一个绑定属性太慢,我们可以将配置文件中配置的属性值映射到组件中。新建一个JavaBean使用@ConfigurationProperties("user")
告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定。
@Component
@ConfigurationProperties(prefix = "user")
@Data
public class User {
private String username;
private String password;
}