Spring Boot —— YAML配置文件

引言

首先,YAML并不是仅仅可以使用在Java项目中,它是一种类似于json结构的标记语言,可以为所有的编程语言服务。它强调更直观的层级表示,比较适合描述配置文件中的层级关系。

Spring Boot可以识别后缀名为".properties"或“.yaml”或“.yml” 的全局配置文件。以yaml或yml为后缀的配置文件都是YAML文件。

默认的配置文件的优先级如下:

file:./config/       

file:./              项目根路径下

classpath:/config/

classpath:/      项目resources文件夹下

一、与其他配置格式的比较

与其他配置文件的格式比较,yaml的表达方式既有直观突出的层级结构,同时又不会冗余重复:

.properties配置方式:

 .xml配置方式:

.yml配置方式:

 不难看出,兼顾层级结构而又简洁明快的配置方式当然YAML是最好的选择。

二、YAML基本语法

2.1 表达式

YAML用一个键值对来表示每个属性(大小写敏感),类似于json但却不需要大括号,用冒号分割Key和Value的同时需要在冒号后面加入一个强制的空格

key: value

举例:

2.2 层级表示

YAML采用换行并缩进的方式来表达父节点与子节点、对象与属性之间的关系,同级的节点或属性要严格保证相同的缩进:

2.3 字面量的表示

字面量包括数字、字符串、布尔值等,YAML中可以直接书写字面量,而且一般的字符串不需要加任何引号。而引号的使用一般与特殊字符有关:双引号不会转义特殊字符;单引号会转义特殊字符。比如字符串中包含 \n ,双引号识别为换行,单引号会识别为 \n 。

2.4 对象的表示

YAML为对象的表示提供了两种表达方式:层级缩进、行内表达

层级缩进如2.2所示只需要缩进保持对齐,就可以完整的表达一个对象。另一种行内表达的方式如下:

和JSON结构体类似,不过需要注意强制空格,和不加引号。

2.5 数组或List

同样有两种写法:层级缩进和行内表达。

层级缩进的方式,因为属性的值是多个,所以与一般的属性定义略有不同,每个元素换行缩进之后需要在前面加一个短横线 - ,然后强制空格

行内表达的方式,注意是中括号 [ ] :

2.6 Map

使用@Value可以实现注入:

@Value("#{${cache.studentAge:null}}")
private Map<String, Integer> studentAge;
cache:studentAge: "{morty : 28}"

 注意,map需要用引号将整个结构括起来。我们可以在@Value 中加入默认值 null,这样可以避免在没有配置属性的时候报错,但是一定要记得在程序中判空。

三、获取配置文件(不限于YAML)中的值

Spring Boot默认使用SnakeYAML解析YAML文件。

使用配置文件的时候,除了修改Spring Boot提供的默认配置以外(如修改端口),我们还可以在配置文件中定义完全属于自己的对象,比如一个全局唯一的管理员对象

Administrator: name: Mortyage: nullgender: MALErole: adminpermission: all

定义JavaBean,并使用注解@ConfigurationProperties。

测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class AdminTest {@Autowiredprivate Admin admin;@Testpublic void test() {System.out.println("管理员:" + admin);}
}

执行结果:

另外,除了@ConfigurationProperties注解之外,单独取得某个值还可以使用@Value,它们之间的区别:

关于@ConfigurationProperties和@Value 两个注解之间详细的区别,参考《Spring Boot————@ConfigurationProperties与@Value》。

当然,业务开发中采用在配置文件中定义实体bean的方式是比较愚蠢的。所以,在大多数应用开发场景中,@Value要比@ConfigurationProperties注解用途更广。然而在Spring Boot的自动配置原理中(参见《Spring Boot面试杀手锏————自动配置原理》),Spring Boot就是使用@ConfigurationProperties完成从配置文件到XxxxProperties对象的映射绑定的,因此,理解这种批量导入属性的方式是有必要的。

综上,就是关于YAML配置文件语法的简单讲解和Spring Boot从配置文件中的取值方式,欢迎各位看官文末留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/558897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

centos7下docker启动失败解决

centos7下docker启动失败解决 docker安装成功却启动失败&#xff0c;查看docker服务&#xff0c;systemctl status docker.service, 服务日志提示Failed to start Docker Application Container Engine.如下图所示&#xff1a; 解决方法&#xff0c;修改docker文件&#xff0…

Java并发编程实战————Semaphore信号量的使用浅析

引言 本篇博客讲解《Java并发编程实战》中的同步工具类&#xff1a;信号量 的使用和理解。 从概念、含义入手&#xff0c;突出重点&#xff0c;配以代码实例及讲解&#xff0c;并以生活中的案例做类比加强记忆。 什么是信号量 Java中的同步工具类信号量即计数信号量&#x…

JavaCard概述

什么是JavaCard JavaCard&#xff0c;即Java智能卡。以智能卡硬件系统为基础&#xff0c;通过软件的方式构造一个支持Java程序下载、安装、运行的软/硬件系统。由于引入了虚拟机技术&#xff0c;JavaCard具备硬件无关性&#xff0c;即智能卡应用程序开发与智能卡硬件系统相分离…

LeetCode算法入门- Add Two Numbers-day3

LeetCode算法入门- Add Two Numbers-day3 Add Two Numbers You are given two non-empty linked lists representing two non-negative integers. The digits are stored in reverse order and each of their nodes contain a single digit. Add the two numbers and return …

Java核心篇之多线程---day1

Java面试之多线程—day1 一. 线程中sleep方法与wait方法有什么区别&#xff1f; 对于 sleep()方法&#xff0c;我们首先要知道该方法是属于 Thread 类中的。而 wait()方法&#xff0c;则是属于Object 类中的。 在调用 sleep()方法的过程中&#xff0c; 线程不会释放对象锁。而…

Java 多线程 —— 常用并发容器

引言 本博客基于常用的并发容器&#xff0c;简单概括其基本特性和简单使用&#xff0c;并不涉及较深层次的原理分析和全面的场景用法。 适合对不了解并发容器的同学&#xff0c;工作中遇到类似的场景&#xff0c;能够对文中提到的并发容器留有简单印象就好。 一、Concurrent…

Tomcat运行三种模式:http-bio|http-nio|http-apr介绍

转自《tomcat运行三种模式:http-bio|http-nio|http-apr介绍》 Tomcat是一个小型的轻量级应用服务器&#xff0c;也是JavaEE开发人员最常用的服务器之一。不过&#xff0c;许多开发人员不知道的是&#xff0c;Tomcat Connector(Tomcat连接器)有bio、nio、apr三种运行模式&#…

LeetCode算法入门- Reverse Integer-day6

LeetCode算法入门- Reverse Integer-day6 Given a 32-bit signed integer, reverse digits of an integer. Example 1: Input: 123 Output: 321 Example 2: Input: -123 Output: -321 Example 3: Input: 120 Output: 21 class Solution {public int reverse(int x) {long…

Java工具方法——属性拷贝方法:BeanUtils.copyProperties(Object, Object)

介绍 org.springframework.beans.BeanUtils.copyProperties(Object, Object)是spring 框架的对象工具类&#xff1a;BeanUtils下的一个拷贝对象属性的方法。 官方注释 把给定的源对象属性值拷贝到目标对象中。 注意&#xff1a;源对象类与目标对象类不一定非要完全匹配&…

Git初学札记(九)————EGit检出远程分支

引言 现在有这样一个使用场景&#xff1a;团队中的其他开发者提交了一个新的特性分支&#xff08;如feature_1&#xff09;&#xff0c;要求我们一同开发&#xff0c;并将自己修改的代码也全部提交到这个分支上去。那么如何将这个分支检出&#xff0c;并将本地检出的分支与这个…

Spring Boot————ApplicationListener实现逃课事件监听

引言 上一篇文章转了一篇关于ApplicationListener用于在Web项目启动时做一些初始化的用法。 但是&#xff0c;在实际生产过程中&#xff0c;当一个事件产生&#xff0c;又是如何被onApplicationEvent()方法监听到&#xff0c;并执行一系列动作呢&#xff1f;简单搜索了一下&a…

Java核心篇之Redis--day4

Java核心篇之Redis–day4 Redis有哪些数据结构&#xff1f; 字符串String、字典Hash、列表List、集合Set、有序集合SortedSet。 1.String&#xff1a;字符串&#xff0c;常用命令&#xff1a;get&#xff0c;set&#xff0c;decr&#xff0c;incr&#xff0c;mget&#xff08;查…

软件版本GA、RC、beta等含义

原文《软件版本GA、RC、beta等含义》 GA General Availability&#xff0c;正式发布的版本&#xff0c;官方开始推荐广泛使用&#xff0c;国外有的用GA来表示release版本。 RELEASE 正式发布版&#xff0c;官方推荐使用的版本&#xff0c;有的用GA来表示。比如spring。 Sta…

Java核心篇之泛型--day5

Java核心篇之泛型–day5 泛型是JDK5时引入的一个新特性&#xff0c;泛型提供了编译时类型安全检查的机制&#xff0c;该机制允许程序猿在编译时检测到非法的类型输入。 泛型的本质是参数化类型&#xff0c;也就是说操作的类型被指定为一个参数。 假定我们有一个需求&#xff…

Spring Boot————AOP入门案例及切面优先级设置

看了这篇文章&#xff0c;如果你还是不会用AOP来写程序&#xff0c;请你打我&#xff01;&#xff01; .||| 引言 Spring AOP是一个对AOP原理的一种实现方式&#xff0c;另外还有其他的AOP实现如AspectJ等。 AOP意为面向切面编程&#xff0c;是通过预编译方式和运行期动态代…

Spring Boot————Spring Data JPA简介

引言 JPA是Java 持久化API的缩写&#xff0c;是一套Java数据持久化的规范&#xff0c; Spring Data Spring Data项目的目的是为了简化构建基于Spring 框架应用的数据访问技术&#xff0c;包括对关系型数据库的访问支持。另外也包含非关系型数据库、Map-Reduce框架、云数据服…

Spring Boot————Spring Boot启动流程分析

一、引言 Spring Boot 的启动虽然仅仅是执行了一个main方法&#xff0c;但实际上&#xff0c;运行流程还是比较复杂的&#xff0c;其中包含几个非常重要的事件回调机制。在实际生产开发中&#xff0c;有时候也会利用这些启动流程中的回调机制&#xff0c;做一些项目初始化的工…

Spring Boot————应用启动时的监听机制测试

引言 本文承接前面的《Spring Boot————Spring Boot启动流程分析》&#xff0c;主要测试一下ApplicationContextInitializer、SpringApplicationRunListener、ApplicationRunner、CommandLineRunner这四个接口实现之下的组件是何时在Spring Boot项目启动时创建并执行相关方…

2018年度总结

2018年&#xff0c;已经成为过去式&#xff0c;这360多天依旧过的很快&#xff0c;快到当我手扶键盘回想这一年发生的点点滴滴时&#xff0c;都没有任何感慨。可能我天生是个无感之人&#xff0c;或许&#xff0c;这一年的时光&#xff0c;无数的事故、故事已经让我变得不那么感…

Spring Boot————默认缓存应用及原理

引言 应用程序的数据除了可以放在配置文件中、数据库中以外&#xff0c;还会有相当一部分存储在计算机的内存中&#xff0c;这部分数据访问速度要快于数据库的访问&#xff0c;因此通常在做提升数据访问速度时&#xff0c;会将需要提升访问速度的数据放入到内存中&#xff0c;…