目录
一、yml和properties比较
本文主要讲解SpringBoot工程环境下,通过yml和properties两种配置文件形式,将JavaConfig绑定配置文件的值,以及关于yml文件的一些非常规的玩法。以下是yml和properties的主要对比:
JSR303数据校验是一种后端数据校验支持,它是Java Specification Requests (JSR) 303的一部分,属于Java EE 6的一项子规范,也被称为Bean Validation。这个规范为Bean验证定义了元数据模型和API,使得开发者能够为Java对象添加验证规则,确保数据的完整性和准确性。JSR303数据校验主要通过注解(Annotations)来实现,这些注解被添加到Java类的字段上,用于定义验证规则。例如,:ml-search[@NotNull]
用于验证字段值不能为null,:ml-search[@NotEmpty]
用于验证字符串字段不能为空,:ml-search[@Size]
用于验证字符串、集合或数组字段的长度或大小等。此外,JSR303还支持更复杂的校验需求,如分组校验(针对不同场景的复杂校验)和自定义校验。
JSR303数据校验的重要性在于,它提供了一种在数据进入业务逻辑之前进行验证的方法,从而减少了因数据问题导致的错误和异常。通过结合前端校验和后端校验,可以进一步提高系统的健壮性和数据的安全性。在实际应用中,JSR303注解被广泛应用于Spring Boot等框架中,使得数据校验变得更加简单和高效。
除此以外,yml和properties文件格式的主要区别在于语法、数据类型、可读性、扩展性、语言通用性以及优先级。
-
语法:YAML使用缩进和冒号来表示层次结构,而Properties使用等号和点号分隔键值对。YAML的语法更加简洁、易读,支持注释和多行文本,而Properties的语法相对简单,不支持注释和多行文本。
-
数据类型:YAML支持多种数据类型,如字符串、数字、布尔值、数组、对象等,可以更好地表示复杂的数据结构。相比之下,Properties只支持字符串类型。
-
可读性:YAML的语法使得配置信息更易于组织和描述复杂的配置,而Properties的语法不太适合描述复杂的配置信息。
-
扩展性:YAML支持自定义标签和类型,可以扩展语言的功能和表达能力,而Properties的扩展性相对较低。
-
语言通用性:Properties格式的配置文件只适用于Spring Boot项目,也就是只适用于Java语言。而YAML支持更多的开发语言,可以用在Java、PHP、Python、Ruby、JavaScript、Perl、Golang等语言中。
-
优先级:在SpringBoot中,如果同时存在YAML和Properties配置文件,YAML文件的优先级高于Properties文件。
二、yml注入属性值到实体
package com.example.pojo;
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @ConfigurationProperties作用:
* 将配置文件中配置的每个属性的值,映射到这个组件中
* 告诉springboot将本类中的所有属性和配置文件中相关的配置进行绑定
* 参数prefix = "person":将配置文件中的person下面的所有属性一一对应
* 只有这个组件是容器中的组件,才能使用容器提供的ConfigurationProperties功能
* 因此需要通过注解@Component来注册Bean
*/
@Data
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String name;
private int age;
private boolean isWork;
private Date birth;
private Map<String, Object> maps;
private List<Object> list;
private Pet pet;
}
package com.example.pojo;
import lombok.Data;
import org.springframework.stereotype.Component;
@Data
@Component
public class Pet {
private String name;
private int age;
}
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-