第二章 SpringBoot环境下yml和properties的几种玩法

目录

一、yml和properties比较

 二、yml注入属性值到实体

2.1. 松散绑定语法

2.2. JSR303数据校验

三、properties注入属性值到实体

四、配置文件位置及多环境配置

4.1. 配置文件位置

​编辑4.2. 多环境配置

4.2.1. 方式1

 4.2.2. 方式2


一、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-
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值