SpringBoot yml配置文件
在 SpringBoot 项目中默认的配置文件是 application.properties,但是实际项目中我们一般会使用 application.yml 文件。本文主要讲解在 SpringBoot 中读取 yml 配置的几种方式。
YAML 的设计目标,就是方便人类读写。它实质上是一种通用的数据串行化格式。
1. yml 文件语法规则
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
#
表示注释,从这个字符一直到行尾,都会被解析器忽略- key: value 格式书写。key 后面跟着冒号,再后面跟着一个空格,然后是值
- 可以使用 "-小写字母" 或 "_小写字母" 来代替 "大写字母",如 userName 与 user-name ,user_name 含义相同。
2. yml 数据表示方式
YAML 支持的数据结构有三种。
- 纯量:单个的、不可再分的普通的值,例如:数字、字符串、布尔值
- 对象:键值对集合,又称为映射(mapping)/ 哈希(hashes) / 字典(dictionary)
- 数组:一组按次序排列的值,又称为序列(sequence) / 列表(list)
2.1 纯量
直接的 key: value ,例如:
age: 18 name: mysgk
注:
字符串默认不用加上单引号或者双引号;
"":双引号;不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思 name: "zhangsan \n lisi":输出;zhangsan 换行 lisi
'':单引号;会转义特殊字符,特殊字符最终只是一个普通的字符串数据 name: ‘zhangsan \n lisi’:输出;zhangsan \n lisi
2.2 对象
第一行定义对象,在下一行来写对象的属性和值的关系;注意缩进(不支持tab,需要使用空格),例如:
person: age: 18 name: mysgk
2.3 数组
用 - 值表示数组中的一个元素,例如
hands: - left - right
3. 使用 @value 注解读取
如果只需要配置文件中的少量的值,使用 @Value 注解是最简单方便的方式。这种方式是spring最早提供的方式,通过@Value注解的方式,该注解用在属性上,但是要求该属性所在的类必须要被spring管理。
例如,我们在 application.yml 中配置一段内容:
website: host: codebaoku
我们在代码中可以这样取值:
@Value("${website.host}") public String host;
注:此处 host 所在的类需要是一个组件,如果是实体类就需要加上 @Component 注解。
另外,使用 @Value 注解方式读取 application.properties 中配置的内容,与读取 yml 一样。
application.properties 中配置内容如下:
website.host: codebaoku
代码中读取方式完全相同。
4. 使用 @ConfigurationProperties 注解读取
如果需要一个 JavaBean 来专门映射配置的话,我们一般会使用 @ConfigurationProperties 注解来进行读取。@ConfigurationProperties 注解是 springboot 提供的,在 springboot 中大量使用,下面看其用法:
student: age: 18 name: codebaoku
对应的 javabean:
@Component @ConfigurationProperties(prefix = "student") public class Student { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
使用 @ConfigurationProperties 注解,需要配置一个prefix (前缀) 参数,即写上 key 就可以。另外 JavaBean 必须使用 @Component 注解,标记该注解的意思是要把该类交给 spring 管理,也就是说要让 spring 管理此类,也可以使用其他注解,例如 @Service。
5. 使用 @EnableConfigurationProperties 注解读取
使用 @EnableConfigurationProperties 注解与使用 @ConfigurationProperties 基本相同,但不需要 @Component 注解。
@EnableConfigurationProperties(prefix = "student") public class Student { private String name; private Integer age; public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } @Override public String toString() { return "Student{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
6. 使用 @Autowired 注解和 Environment 对象读取
使用 Environment 对象,该对象是 spring 提供的一个对象,且是spring内部创建的对象。
website: host: codebaoku
使用 @Autowired 和 Environment 对象,代码如下:
@Autowired private Environment env @RequestMapping(value = "/website", method = RequestMethod.GET) public String website() { System.out.println(env.getProperty("website.host")); return env.getProperty("website.host"); } }
7. 使用 @PropertySource 注解读取 yml
我们除了可以读取 application.yml 文件的配置,也可以读取其它文件。例如:创建 test.yml 文件,并且与 application.yml 处于相同的目录。
我们可以 @PropertySource 注释指定特定文件:
@PropertySource("classpath:test.yml")
然后可以使用上面的各种方法读取数据。
Spring Boot 注解: Spring Boot注解是一种元数据形式,可提供有关程序的数据。换句话说,注解用于提供有关程序的 补充信息。它不是我们开发的应用程序的一部分。它对其注解的代码的操作没有直接影响。不会更改已编译程序 ...