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…

Effective Java(一)———— 代替构造器和Setter的构建器模式

引言 Java语言中的一部经典著作《Effective Java》&#xff0c;里面涵盖了78条我们应该熟练的Java编程技巧。 本篇博客是该书学习的系列笔记第一篇。本系列博客不会与书中的78条建议完全匹配。只是以一种读者的身份来记录和总结从书中得到的好的编程建议&#xff0c;博客中会…

LeetCode算法入门- Palindrome Number-day2

LeetCode算法入门- Palindrome Number-day2 Palindrome Number Determine whether an integer is a palindrome. An integer is a palindrome when it reads the same backward as forward. Example 1: Input: 121 Output: true Example 2: Input: -121 Output: false Ex…

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并发编程实战————并发技巧小结

可变状态是至关重要的。所有的并发问题都可以归结为如何协调对并发状态的访问。可变状态越少&#xff0c;就越容易确保线程安全性。尽量将域声明为final类型&#xff0c;除非需要它们是可变的。不可变对象一定是线程安全的。不可变对象能极大地降低并发编程的复杂性。它们更为简…

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

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

LeetCode算法入门- Longest Substring Without Repeating Characters-day4

LeetCode算法入门- Longest Substring Without Repeating Characters-day4 Longest Substring Without Repeating Characters Given a string, find the length of the longest substring without repeating characters. Example 1: Input: “abcabcbb” Output: 3 Explana…

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

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

LeetCode算法入门- Longest Palindromic Substring-day5

LeetCode算法入门- Longest Palindromic Substring-day5 Longest Palindromic Substring Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000. Example 1: Input: “babad” Output: “bab” Note: “a…

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;源对象类与目标对象类不一定非要完全匹配&…

LeetCode算法入门- String to Integer (atoi)-day7

LeetCode算法入门- String to Integer (atoi)-day7 String to Integer (atoi): Implement atoi which converts a string to an integer. The function first discards as many whitespace characters as necessary until the first non-whitespace character is found. The…

LeetCode算法入门- Roman to Integer Integer to Roman -day8

LeetCode算法入门- Roman to Integer -day8 Roman to Integer&#xff1a; 题目描述&#xff1a; Roman numerals are represented by seven different symbols: I, V, X, L, C, D and M. Symbol    Value I        1 V        5 X        10 L…

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

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

LeetCode算法入门- 3Sum -day9

LeetCode算法入门- 3Sum -day9 题目描述&#xff1a; Given an array nums of n integers, are there elements a, b, c in nums such that a b c 0? Find all unique triplets in the array which gives the sum of zero. Note: The solution set must not contain dup…

XML学习(一)————XML简介

引言 作为数据传输界鼎鼎大名的扛把子&#xff0c;XML被应用于各个方面&#xff0c;但随着弱结构化标记语言如JSON、YAML等的出现&#xff0c;人们慢慢的脱离了XML的统治&#xff0c;但在互联网早期的发展当中XML是不可或缺的一部分&#xff0c;比如各种微信开发中的数据传输&…

Java核心篇之Java锁--day2

Java核心篇之Java锁–day2 乐观锁&#xff1a;乐观锁是一种乐观思想&#xff0c;即认为读多写少&#xff0c;每次去取数据的时候都认为其他人不会修改&#xff0c;所以不会上锁&#xff1b;但是在更新的时候会判断一下在此期间别人有没有去修改它&#xff0c;如果有人修改的话…