SpringBoot-配置文件解析
由于 Spring Boot 源自 Spring ,所以 Spring 中存在的属性注入,在 Spring Boot 中一样也存在。
由于 Spring Boot 中,默认会自动加载 application.properties 文件,所以简单的属性注入可以直接在这个配置文件中写。
例如我们定义一个Book类如下:
@Data
@Component
public class Book extends BaseEntity{
private String name;
private String author;
}
然后在application.yml文件中定义属性:
book:
name: Spring-Boot
author: TP
按照传统的方式(Spring中的方式),可以直接通过 @Value 注解将这些属性注入到 Book 对象中:
@Data
@Component
public class Book extends BaseEntity{
@Value("${book.name}")
private String name;
@Value("${book.author}")
private String author;
}
配置完成后,在 Controller 或者单元测试中注入 Book 对象,启动项目,就可以看到属性已经注入到对象中了。
一般来说,我们在 application.properties/application.yml 文件中主要存放系统配置,这种自定义配置不建议放在该文 件中,可以自定义 properties 文件来存在自定义配置。
例如我们定义一个Cat类并编写一个cat.properties文件如下:
我们可以通过 @PropertySource 来引入配置
这样,当项目启动时,就会自动加载 book.properties 文件。
编写测试类测试效果如下:
这只是 Spring 中属性注入的一个简单用法,和 Spring Boot 没有任何关系,如果采用 Spring 中的配置方式,当配置的属性非常多的时 候,工作量就很大了,而且容易出错,Spring Boot 引入了类型安全的属性注入,使用类型安全的属性注入,可以有效的解决这个问题。
我们新建一个Cat2类:
@Data
@Component
@PropertySource(value = "classpath:properties/cat.properties", encoding = "utf-8")
@ConfigurationProperties(prefix = "cat")
public class Cat2 {
private String name;
private int age;
}
我们通过@ConfigurationProperties(prefix = "cat")注解,并且配置了属性的前缀,此时会自动将 Spring 容器中对应的数据注入到对象对应的属性中,就不用通过 @Value 注解挨个注入了,减少工作量并且避免出错。