配置文件分类
Spring boot是基于约定的,所以很多配置都有默认值,但如果想使用自己的配置替换默认配置的话,就可以使用application.properties或者 application.yml( application.yaml)进行配置
YAML全称是 YAML AiR’t Markup Language。YAML是一种直观的能够被电脑识别的的数据数据序列化格式,并且容易被人类阅读,容易和脚本语言交互的,可以被支持YAM库的不同的骗程语言程序导入,比如:C/C++,Ruby, Python,Java,Per,C#,PHP等。
YML文件是以数据为核心的,比传统的xm方式更加简洁
YAML文件的扩展名可以使用yml或者yaml
properties:
server.port=8080
server.address=127.0.0.1
yml/yaml:
server:
port: 8080
address: 127.0.0.1
默认配置文件名称: application
在同一级目录下优先级为: properties>ym>yaml (一般为yml)
YAML/YML 基本语法
- 小写敏感
- 数据值前边必须有空格,作为分隔符
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格(各个系统Tab对应的空格数目可能不同,导致层次混乱)
- 缩进的空格数目不重要,只要相同层级的元素左侧齐即可
- #表示注释,从这个字符一直到行尾,都会被解析器忽略
YAML(yaml/yml)数据格式
-
对象(map):键值对集合
person: name: zhangsan # 行内写法 person: {name: zhangsan}
-
数组: 一组按次排列的值
adderss: - beijing - shanghai # 行内写法 address: [beijing,shanghai]
-
纯量:单个的、不可再分的值
mg1:'he11 \n woxld'#单引忽略转义字符(\n不进行转义) msg2:"he11 \n woxld"#双引识别转义字符(\n 进行换行转义)
-
参数引用
name: lisi person: name: ${name} # 引用上边定义的name值
java代码读取配置内容
配置文件 application.yml
name: abc
person:
name: zhangsan
age: 20
address:
- beijing
- shanghai
mg1: 'he11 \n woxld'#单引忽略转义字符(\n不进行转义)
msg2: "he11 \n woxld"#双引识别转义字符(\n 进行换行转义)
- @Value
public class HelloController { @Value("${name}") private String name; @Value("${person.name}") private String name2; @Value("${person.age}") private int age; @Value("${address[0]}") private String address1; @Value("${msg1}") private String msg1; @Value("${msg2}") private String msg2; public String hello2() { System.out.println(name); System.out.println(name2); System.out.println(age); System.out.println(address1); System.out.println(msg1); System.out.println(msg2); } }
- Environment
import org.springframework.core.env.Environment; public class HelloController { // 将配置文件全部配置封装为 Environment 对象 @Autowired private Environment env; public String hello2() { // 利用 Environment 对象中getProperty 方法获取配置文件数据 System.out.println(env.getProperty("person.name")); System.out.println(env.getProperty("address[0]")); } }
- @ConfigurationProperties
配置文件
person类person: name: zhangsan age: 20 address: - beijing - shanghai
import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Data @Component @ConfigurationProperties(prefix = "person") public class Person { private String name; private int age; private String[] address; }
public class HelloController { @Autowired private Person person; public String hello2() { System.out.println(person); String[] address = person.getAddress(); for (String s : address) { System.out.println(s); } } }
配置profile
在开发 Spring boot应用时,通常同一套程序会被安装到不同环境
比如:开发、测试生产等。其中数据库地址服务器端口等等配置都不同,如果每次打包时,都要修改配置文件
profile功能就是来进行动态配置切换的
- 多profile文件配置
配置多个application-XX.properties文件
在application.properties 文件配置spring.profiles.active=XX # 配置多个文件的后缀
- YML多文档配置(用- - - 三杠区分)
--- server: port: 8081 spring: profiles: dev --- server: port: 8082 spring: profiles: test --- server: port: 8083 spring: profiles: pro --- # 配置激活的文档 spring: profiles: active: dev
- 虚拟机 配置方式(
-Dspring.profiles.active=dev
)
- 环境配置(
--spring.profiles.active=dev
)
- jar包运行方式(
java -jar xxx.jar --spring.profiles.active=dev
)