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 中的集合类型!



相关文章
|
3月前
|
Java 关系型数据库 MySQL
Spring Boot自动配置:魔法背后的秘密
Spring Boot 自动配置揭秘:只需简单配置即可启动项目,背后依赖“约定大于配置”与条件化装配。核心在于 `@EnableAutoConfiguration` 注解与 `@Conditional` 系列条件判断,通过 `spring.factories` 或 `AutoConfiguration.imports` 加载配置类,实现按需自动装配 Bean。
|
3月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
2月前
|
网络安全 开发工具 git
在GitLab CI中同步HTTPS仓库地址的yaml配置
最后,提交并推送 `.gitlab-ci.yml`文件到您的GitLab仓库。GitLab CI/CD将自动识别这个文件,并在每次推送到 `master`分支时执行定义的同步任务。
169 16
|
2月前
|
前端开发 Java 应用服务中间件
《深入理解Spring》 Spring Boot——约定优于配置的革命者
Spring Boot基于“约定优于配置”理念,通过自动配置、起步依赖、嵌入式容器和Actuator四大特性,简化Spring应用的开发与部署,提升效率,降低门槛,成为现代Java开发的事实标准。
|
2月前
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
303 3
|
2月前
|
Kubernetes 安全 网络协议
Kubernetes实用指令:通过dry-run生成部署与服务的YAML配置
总结起来, 使用 ` -- dry—run = client `- o yam l' 参数能够帮助用户预览 Kubernetes 资源定义并且确保它们符合预期效果且没有立即影响现有集群断层结构. 这种做法对于新手学习 K8s 资源规范、测试新策略或者审核现有策略都非常有效率与安全.
263 4
|
3月前
|
Java 测试技术 数据安全/隐私保护
通过yaml文件配置自动化测试程序
通过yaml文件可以将自动化测试环境,测试数据和测试行为分开,请看一下案例
105 4
|
3月前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
558 5
|
3月前
|
监控 安全 Java
Spring Cloud 微服务治理技术详解与实践指南
本文档全面介绍 Spring Cloud 微服务治理框架的核心组件、架构设计和实践应用。作为 Spring 生态系统中构建分布式系统的标准工具箱,Spring Cloud 提供了一套完整的微服务解决方案,涵盖服务发现、配置管理、负载均衡、熔断器等关键功能。本文将深入探讨其核心组件的工作原理、集成方式以及在实际项目中的最佳实践,帮助开发者构建高可用、可扩展的分布式系统。
219 1
|
3月前
|
传感器 Java 数据库
探索Spring Boot的@Conditional注解的上下文配置
Spring Boot 的 `@Conditional` 注解可根据不同条件动态控制 Bean 的加载,提升应用的灵活性与可配置性。本文深入解析其用法与优势,并结合实例展示如何通过自定义条件类实现环境适配的智能配置。
186 0
探索Spring Boot的@Conditional注解的上下文配置

热门文章

最新文章