Properties 配置
所放位置
Spring Boot项目中的配置文件一共可以出现在如下4个位置(后面数字代表优先级)
- 项目根目录下的config 文件夹中。1
- 项目根目录下。2
- classpath 下的config文件夹中。(classpath是resources文件下,是放的静态资源) 3
- classpath 下。4
当使用了yaml文件时优先级是一样的
类型安全配置属性
无论是 Properties 配置还是 YAML 配置,最终都会被加载到spring Environment(环境)中。Spring 提供了@Value注解以及EnvironmentAware接口来将Spring Environment中的数据注入到属性上,SpringBoot对此进一步提出了类型安全配置属性(Type-safe ConfigurationProperties这样即使在数据量非常庞大的情况下,也可以更加方便地将配置文件中的数据注入Bean中。考虑在 中添加如下一段配置:
=张三
=男
=30
将这一段配置数据注入如 Bean 中:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ToString
@ConfigurationProperties(prefix="user")
public class User{
private String name;
private String gender;
private String age;
}
代码解释
-
@ConfigurationProperties中的prefix属性描述了要加载的配置文件的前缀。
-
如果配置文件是一个YAML文件,那么可以将数据注入一个集合中。
-
Spring Boot 采用了一种宽松的规则来进行属性绑定,如果Bean中的属性名为authorName,那么配置文件中的属性可以是book.author_name、-name、或者。
最后 UserController 行简单测试
@RestController
public class UserController{
@Autowired
User user;
@GetMapping("/one")
public String User(){
return User.toString();
}
}
YAML 配置
常规配置
YAML JSON 的超集,简洁而强大,是 种专门用来书写配置文件的语言,可以替代 。在创建 Spring Boot 项目时,引入的 pring-boot-starter-web 依赖间接地引入了 snakeyaml 依赖, snakeyaml 会实现对 YAML 配置的解析。 YAML 的使用非常简单,利用缩进来表示层级关系,并且大小写敏感。在 Spring Boot 目中使用 YAML 只需要在 resources 目录下创建 application yml 文件即可,然后向 application. yml 中添加如下配置:
server:
port: 80
servlet:
context-path: /chapter02
tomcat:
uri-encoding: utf-8
这一段配置等效于 application. properties 中的如下配置:
=80
-path=/chapter02
-encoding=utf-8
复杂配置
YAML 不仅可 配置常规属性,也 配置复杂属性 例如下面一组配置:
user:
name: 张三
age: 18
像Properties 配置文件一样,这一段配置也可以注入到Bean中,代码如下:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ToString
@ConfigurationProperties(prefix="user")
public class User{
private String name;
private String age;
}
YAML 还支持列表配置 ,例如下面一组
favorites:
- 足球
- 徒步
- Coding
这一组配置可注入如Bean中:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ToString
@ConfigurationProperties(prefix="user")
public class User{
private String name;
private String age;
private List<String> favorites;
}
YAML 还支持更复杂的配置,即集合中也可以是一个对象,例如下面一组配置:
my:
user:
name: 张三
age: 18
favorites:
- 足球
- 徒步
- Coding
name: 李四
age: 30
favorites:
- 游戏
- 泡妞
- 鬼火少年
这组配置在集合中放的是一个对象,因 注入如下集合中:
@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ToString
@ConfigurationProperties(prefix="my")
public class User{
private List<User> user;
}
在Spring Boot 中使用 YAML 虽然方便, 但是 YAML 有一些缺陷 ,例如无法使用@ProprtySource 注解加载 YAML 文件,如项目中有这种需求还是需要使用 Properties 格式的配置文件。