YAML的舞蹈:掌握Spring整合YAML配置的技术细节

简介: YAML的舞蹈:掌握Spring整合YAML配置的技术细节


YML 介绍

YML(YAML)和 Properties 是两种常见的配置文件格式,用于在软件开发中存储和管理配置信息。它们有以下区别:

  1. 语法结构:YML 使用缩进和冒号的方式表示层级关系,而 Properties 使用键值对的方式表示配置项。
  2. 可读性:YML 的语法更加简洁和易读,采用了自然语言的表达方式,支持列表、字典等数据结构,使得配置文件更加直观。相比之下,Properties 的语法相对简单,只能表示简单的键值对。
  3. 层级结构:YML 支持多层级的配置结构,可以使用缩进来表示不同的层级关系,使得配置文件更加灵活。而 Properties 只支持一级的键值对结构,无法表示复杂的层级关系。
  4. 数据类型:YML 支持多种数据类型,包括字符串、整数、浮点数、布尔值等,且可以通过引号来表示特殊字符。Properties 则只支持字符串类型,所有的值都被视为字符串。
  5. 注释:YML 支持注释,可以在配置文件中添加注释来解释配置项的作用,提高可读性。而 Properties 不支持注释,无法在配置文件中添加解释性文字。

总的来说,YML 配置文件相对于 Properties 配置文件更加灵活、易读,并且支持多种数据类型和层级结构。在复杂的配置场景下,使用 YML 可以更好地组织和管理配置信息。而 Properties 则适用于简单的键值对配置,或者对配置文件格式要求较为严格的情况。

整合 Demo

引入依赖

<dependency>
 <groupId>org.yaml</groupId>
 <artifactId>snakeyaml</artifactId>
 <version>1.23</version>
</dependency>

创建配置文件

src/main/resources/account.yml

account:
  name: XW
  password: 123456

创建配置类

package world.xuewei.mybatis.config;
import org.springframework.beans.factory.config.YamlPropertiesFactoryBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
import org.springframework.core.io.ClassPathResource;
import java.util.Properties;
/**
 * 配置类
 *
 * @author 薛伟
 * @since 2023/9/14 20:51
 */
@Configuration
public class YmlConfig {
    @Bean
    public PropertySourcesPlaceholderConfigurer configurer() {
        YamlPropertiesFactoryBean yamlPropertiesFactoryBean = new YamlPropertiesFactoryBean();
        yamlPropertiesFactoryBean.setResources(new ClassPathResource("account.yml"));
        Properties properties = yamlPropertiesFactoryBean.getObject();
        PropertySourcesPlaceholderConfigurer configurer = new PropertySourcesPlaceholderConfigurer();
        configurer.setProperties(properties);
        return configurer;
    }
}

world.xuewei.mybatis.entity.Account

package world.xuewei.mybatis.entity;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import java.io.Serializable;
/**
 * 用户实体
 *
 * @author 薛伟
 * @since 2023/9/14 20:51
 */
@Component
public class Account implements Serializable {
    private Integer id;
    @Value("${account.name}")
    private String name;
    @Value("${account.password}")
    private String password;
    public Account() {
    }
    public Account(Integer id, String name, String password) {
        this.id = id;
        this.name = name;
        this.password = password;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    @Override
    public String toString() {
        return "Account{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", password='" + password + '\'' +
                '}';
    }
}

测试程序

package world.xuewei;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import world.xuewei.mybatis.entity.Account;
import world.xuewei.mybatis.service.AccountService;
/**
 * @author 薛伟
 * @since 2023/9/14 20:51
 */
public class Dao1Test {
    private ApplicationContext context;
    @Before
    public void before() {
        // 指定配置文件,创建 Spring 工厂
        context = new AnnotationConfigApplicationContext("world.xuewei.mybatis");
    }
    @Test
    public void test1() {
        Account account = context.getBean("account", Account.class);
        System.out.println(account);
    }
}

注意当前的这种集成方案还是无法注入 YML 中的集合类型!



相关文章
|
18天前
|
Java Spring
【Spring】方法注解@Bean,配置类扫描路径
@Bean方法注解,如何在同一个类下面定义多个Bean对象,配置扫描路径
150 73
|
2月前
|
Java 开发者 微服务
手写模拟Spring Boot自动配置功能
【11月更文挑战第19天】随着微服务架构的兴起,Spring Boot作为一种快速开发框架,因其简化了Spring应用的初始搭建和开发过程,受到了广大开发者的青睐。自动配置作为Spring Boot的核心特性之一,大大减少了手动配置的工作量,提高了开发效率。
71 0
|
19天前
|
存储 人工智能 开发框架
Kheish:开源的多智能体开发框架,通过 YAML 配置工作流和多个 Agent 共同协作解决复杂任务
Kheish 是一个开源的多智能体协调平台,基于大型语言模型(LLM)设计,能够通过灵活配置多个智能体来解决复杂任务。平台支持模块化集成、聊天式提示、反馈循环等功能,适用于代码审计、法律文件分析、客户服务自动化等多种应用场景。
74 18
Kheish:开源的多智能体开发框架,通过 YAML 配置工作流和多个 Agent 共同协作解决复杂任务
|
5天前
|
监控 JavaScript 数据可视化
建筑施工一体化信息管理平台源码,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
智慧工地云平台是专为建筑施工领域打造的一体化信息管理平台,利用大数据、云计算、物联网等技术,实现施工区域各系统数据汇总与可视化管理。平台涵盖人员、设备、物料、环境等关键因素的实时监控与数据分析,提供远程指挥、决策支持等功能,提升工作效率,促进产业信息化发展。系统由PC端、APP移动端及项目、监管、数据屏三大平台组成,支持微服务架构,采用Java、Spring Cloud、Vue等技术开发。
|
18天前
|
Java Spring
【Spring配置相关】启动类为Current File,如何更改
问题场景:当我们切换类的界面的时候,重新启动的按钮是灰色的,不能使用,并且只有一个Current File 项目,下面介绍两种方法来解决这个问题。
|
18天前
|
Java Spring
【Spring配置】idea编码格式导致注解汉字无法保存
问题一:对于同一个项目,我们在使用idea的过程中,使用汉字注解完后,再打开该项目,汉字变成乱码问题二:本来a项目中,汉字注解调试好了,没有乱码了,但是创建出来的新的项目,写的注解又成乱码了。
|
18天前
|
Java Spring
【Spring配置】创建yml文件和properties或yml文件没有绿叶
本文主要针对,一个项目中怎么创建yml和properties两种不同文件,进行配置,和启动类没有绿叶标识进行解决。
|
26天前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
83 14
|
24天前
|
XML Java 数据格式
Spring容器Bean之XML配置方式
通过对以上内容的掌握,开发人员可以灵活地使用Spring的XML配置方式来管理应用程序的Bean,提高代码的模块化和可维护性。
60 6
|
26天前
|
XML Java 数据格式
🌱 深入Spring的心脏:Bean配置的艺术与实践 🌟
本文深入探讨了Spring框架中Bean配置的奥秘,从基本概念到XML配置文件的使用,再到静态工厂方式实例化Bean的详细步骤,通过实际代码示例帮助读者更好地理解和应用Spring的Bean配置。希望对你的Spring开发之旅有所助益。
94 3