property、xml、yml的简单比较

  • property文件:语法为 key= value
  • xml文件:使用标签,如:
<server>
    <port>8080</port>
</server>
  • yml文件:语法为 key:空格+value (空格不能省略)
    比较:

property配置文件没有层次感不适合存储复杂的配置信息,xml 有层次感但文件开闭资源浪费资源,yml具有层次感且语法简练

Springboot中读取配置文件的两种方式

方法一:

通过注解 @Value("${属性名}") 来读取配置文件中的属性值

例如有以下配置文件(yml):

application:
  name: fang环境
  version: fang环境

则可以通过以下方式来读取到属性值:

@Data
@Component
public class FangProperty {
    @Value("${fang.name}")
    private String name;
    @Value("${fang.age}")
    private Integer age;
}

配置完成后类交由了spring管理并创建bean,要读取类中的属性应该获取该类的bean,如使用自动装配@Autowried获取,使用new方法创建的对象是读取不到属性值的

方法二:

@ConfigurationProperties(prefix = "fang")

例如有以下配置文件(yml):

fang:
  name: fangxiang
  age: 23

使用方法二可以通过以下代码读取到注解:

@Data
@Component
@ConfigurationProperties(prefix = "fang")
public class FangProperty {
    private String name;
    private String age;
}

注意:
通过指定 @ConfigurationProperties 注解的 prefix 属性值来将将配置文件中前缀为prefix属性值的属性绑定到这个类中,需注意:

1.前缀定义了哪些外部属性将绑定到类的字段上
2.根据 Spring Boot 宽松的绑定规则,类的属性名称必须与外部属性的名称匹配
3.我们可以简单地用一个值初始化一个字段来定义一个默认值
4.类本身可以是包私有的
5.类的字段必须有公共 setter 方法(这里使用Data注解生成了)

两种方法的比较:

方法一适合读取数量较少的配置信息,方法二简单粗暴,一次性把一堆属性值给到了一个类中