Spring Boot 配置文件 · properties 基本语法 · yml 基本语法 · yml 配置不同数据以及 null · yml 配置文件读取

news2024/11/26 4:26:50

  • 一、配置文件作用
  • 二、配置文件的格式
  • 三、properties 配置文件说明
    • 3.1 properties 基本语法
    • 3.2 读取配置文件
    • 3.3 properties 缺点分析
  • 四、yml 配置文件说明
    • 4.1 yml 基本语法
    • 4.2 yml 与 properties 格式对比
    • 4.3 yml 配置不同数据类型以及 null
    • 4.4 yml 配置读取
      • 4.4.1 读取配置文件中的字符串
      • 4.4.2 读取配置文件中的 null
      • 4.4.3 注意事项:value 值加单双引号
      • 4.4.4 配置对象
      • 4.4.5 配置集合(数组)
      • 4.4.6 查看更多系统配置项
  • 五、properties 与 yml 总结

一、配置文件作用

整个项目中所有重要的数据都是在配置文件中配置的,例如:

  • 数据库的连接信息(包含用户名和密码的设置);
  • 项目的启动端口(tomcat - 8080);
  • 第三方系统的调用密钥等信息(调用其它 app 的接口);
  • 用于发现和定位问题的普通日志和异常日志等。

想象一下,Spring Boot 项目如果没有配置文件,那么连接和操作数据库查看用于排查问题的日志信息都不存在,Spring Boot 框架就没有那么简便了。所以学会 Spring Boot 的配置文件很重要。



二、配置文件的格式

Spring Boot 配置文件主要分为以下两种格式:

.properties
.yml

两种配置格式都可以使用。

properties 类型的配置文件是创建 Spring Boot 项目时默认的文件格式。
yml 属于新版配置文件格式,提供了更丰富的功能。

特殊说明

  1. 理论上讲,properties 和 yml 都是可以一起存在于一个项目中。当 properties 和 yml 一起存在同一个项目并且文件中都出现了同样的配置,例如:properties 和 yml 都配置了 “server.port”,那么这时候会以 properties 文件中的为主。也就是说,properties 配置文件的优先级最高,加载完properties 才会加载 yml 文件的配置信息
  2. 虽然两种配置文件的格式可以共存,但是在实际业务中,我们通常会采用统一的配置文件格式,这样可以更好的维护。


三、properties 配置文件说明

properties 配置文件时最早期的配置文件格式,也是创建 Spring Boot 项目默认的配置文件。


3.1 properties 基本语法

properties 是以键值对的形式配置的,key 和 value 之间是可以用 “=” 号连接。

# 配置项目的口号
server.port=8088
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

ps. 配置文件中可以使用 “#” 来添加注释信息。


3.2 读取配置文件

如果在项目中,想要读取配置文件的内容,可以使用 @Value 注解来实现。

@Value 注解使用 “${ }” 的格式读取。

@Component
public class ReadYml {
	// 读取配置文件中server.port所指向的value值
    @Value("${server.port}")
    private String port;

    @PostConstruct
    public void postConstruct() {
        System.out.println("port is " + port);
    }
}

执行结果:已经成功将端口号修改为 8088.

@Component 在 Spring Boot 启动时会注入框架中,注入框架中会执行 @PostConstruct 初始化方法,这时候就能读取到配置信息了。


3.3 properties 缺点分析

properties 配置是以 key - value 的形式配置的,如图:

从上图可以看出,properties 配置文件中有很多冗余的信息,连接数据库 spring.datasource 就写了三遍。

要解决这个问题,就要使用 yml 配置文件的格式化了。



四、yml 配置文件说明

yml 是 YMAL 的缩写,全称是 Yet Another Markup Language 翻译成中文就是 “另一种标记语言”。

yml 是一个可读性高,易于理解,用来表达数据序列化的格式。它的语法与其它成熟的语言类似,而且可以简单表达数组、散列表、标量等数据形态
它使用了大量空白符号缩进和依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等。

yml 最大的优势是可以跨语言,不仅在 Java 中使用 golang、python 也可以使用 yml 作为配置文件。


4.1 yml 基本语法

yml 是树状结构的配置文件,它的基本语法是 “key: value”。注意,key 和 value 之间使用英文冒号加空格的方式组成,其中空格不可省略。

基础语法如下:

# 设置端口号
server:
  port: 9090
  # 记得在冒号和 value 之间加空格

# 错误写法
server:
  port:9999

配置正确,代码会是高亮显示的,错误写法并没有高亮显示。


4.2 yml 与 properties 格式对比

yml 使用示例:

spring:
  datasource:
    url: jdbc:mysql://127.0.0.0:3306/dbname?characterEncoding=utf8
    username: root
    password: root

yml 和 properties 连接数据库的配置相比


4.3 yml 配置不同数据类型以及 null

# 字符串
string:
  value: hello
#布尔类型
boolean:
  value1: true
  value2: false
# 整数
int:
  value1: 10
  value2: 0b1010_0111_0100_1010_1110	# 二进制
# 浮点数
float:
  value1: 3.1415926
  value2: 314159e-5	#科学计数法
# Null, ~ 表示 null
null:
  value: ~

4.4 yml 配置读取

yml 读取配置的方式和 properties 相同,使用 @Value 注解即可,实现代码如下:

4.4.1 读取配置文件中的字符串

@Component
public class ReadYml {

    @Value("${string.hello}")
    private String hello;

    @PostConstruct
    public void postConstruct() {
        System.out.println("string.hello is " + hello);
    }
}

运行结果:

4.4.2 读取配置文件中的 null

@Component
public class ReadYml {
    @Value("${mynull.value}")
    private Object getnull;

    @PostConstruct
    public void getMyNull() {
        System.out.println("mynull.value is " + getnull);
    }
}

运行结果:

4.4.3 注意事项:value 值加单双引号

尝试在 application.xml 中配置如下信息:

string1: 
  str1: hello \n spring boot.
  str2: 'hello \n spring boot.'
  str3: "hello \n spring boot."

读取程序实现如下:

@Component
public class ReadYml {
    @Value("${string1.str1}")
    private String str1;

    @Value("${string1.str2}")
    private String str2;

    @Value("${string1.str3}")
    private String str3;

    @PostConstruct
    public void postConstruct() {
        System.out.println("string1.str1: " + str1);
        System.out.println("string1.str2: " + str2);
        System.out.println("string1.str3: " + str3);
    }
}

运行结果:

从上述结果可以看出:

  • 字符串默认不用加上单引号或者双引号。
  • 单引号会转义特殊字符,特殊字符最终还是一个普通的字符串数据。
  • 双引号不会转义特殊字符,会让特殊字符表达出本身的意思。

4.4.4 配置对象

我们还可以在 yml 中配置对象,如下:

# 写法一:
user1:
  id: 1
  name: jjj
  age: 18

# 写法二:
user2: {id: 1,name: ccc,age: 15}

这时候还可以使用 @Value 来读取配置信息,但是这是一个对象!对象的属性有可能很多,这就需要多个 @Value 一一对应,这在实际开发中是不可能的。

所以我们要使用另一个注解 @ConfigurationProperties 来读取,具体实现如下:

因为是一个对象,所以先要有实体类装载。

@Component
@ConfigurationProperties(prefix = "user1")	// 需要和 yml 配置文件中的相同
public class User {
    private int id;
    private String name;
    private int age;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

调用类实现如下:

@Component
public class ReadYml {

    @Autowired
    private User user;

    @PostConstruct
    public void postConstruct() {
        System.out.println(user);
    }
}

程序运行结果:


4.4.5 配置集合(数组)

配置文件也可以配置 list 集合。

# 写法一
dbtypes1:
  name:
    - mysql
    - sqlserver
    - db2
# 写法二. 行内写法
dbtypes2: { name: [aaa,bbb,ccc]}

集合的读取和对象一样,也是使用 @ConfigurationProperties 来读取的,具体实现如下:

@Component
@ConfigurationProperties(prefix = "dbtypes2")
public class ListConfig {
    private List<String> name;

    public List<String> getName() {
        return name;
    }

    public void setName(List<String> name) {
        this.name = name;
    }
}

打印类的实现如下:

@Component
public class ReadYml2 {
    @Autowired
    private ListConfig listConfig;

    @PostConstruct
    public void postConstruct() {
        System.out.println(listConfig.getName());
    }
}

4.4.6 查看更多系统配置项

本文有限,Spring Boot 还有很多系统配置项,可以访问官网查看:https://docs.spring.io/spring-boot/docs/current/reference/html/application-properties.html#appendix.application-properties



五、properties 与 yml 总结

  • properties 是以 key - value 键值类型的配置形式;而 yml 使用类似 json 格式的树状配置方式,key 和 value 之间使用冒号加空格的方式设置。
  • properties 为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用 yml 可以很好的解决数据冗余的问题。
  • yml 通用性更好,支持更多语言 Java、Go、Python 等。
  • yml 虽然与 properties 共存,但一个项目中建议使用统一的配置类型文件。

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

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

相关文章

Win11十二月系统更新了什么内容?

微软今天发布了12月最新的累积更新补丁&#xff0c;根据Microsoft 支持页面&#xff0c;build 22621.963 现在会在用户 OneDrive 上的存储空间不足时在“设置”应用程序中警告用户&#xff0c;将 Windows Spotlight 与主题设置相结合&#xff0c;修复任务管理器应用程序的界面问…

SSM垃圾分类网站

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 1,系统&#xff1a;Vindows10 2.软件&#xff1a;IDEA.SQLyog 3.数据库环境&#xff1a;ySQL 4.开源框架&#xff1a;sp…

毕业设计-基于SpringBoot幼儿园管理系统

环境&#xff1a;开发工具&#xff1a;idea&#xff0c;数据库&#xff1a;MySQL5.7 jdk1.8 架构&#xff1a;SpringBoot&#xff0c;前端HTML 主要功能 管理员&#xff1a; 用户管理&#xff08;编辑用户、删除用户、添加用户、查询指定用户&#xff09; 角色管理&#xff08;…

软件测试进阶——测试划分

文章目录按照测试对象划分界面测试可靠性测试容错性测试文档测试兼容性测试易用性测试安装和卸载测试安全测试性能测试按照是否查看代码黑盒测试白盒测试灰盒测试按照开发阶段划分单元测试集成测试系统测试回归测试冒烟测试验收测试按照实施组织划分α测试β测试按照是否运行划…

数据可视化常用工具推荐

数据可视化是将数据分析的结果以图形、表格等形式展示出来&#xff0c;这样能我们更加清晰、明了的理解分析结果、判断数据走势等&#xff0c;让没有进行过数据分析的人也能清楚的了解数据中所含有的规律、趋势等。下面小编将向大家介绍几种常用的数据可视化工具&#xff0c;分…

计算机毕业设计php+vue基于微信小程序的高校新生报到管理小程序

项目介绍 随着信息技术和网络技术的飞速发展,人类已进入全新信息化时代,传统管理技术已无法高效,便捷地管理信息。为了迎合时代需求,优化管理效率,各种各样的管理程序应运而生,各行各业相继进入信息管理时代,高校新生报到管理小程序就是信息时代变革中的产物之一。 任何程序都要…

外汇天眼:爆雷跑路!DingHui索要高额佣金,结果客户一分钱没拿到!

我们都知道&#xff0c;外汇交易佣金是外汇平台杠杆进入中国市场时的产物&#xff0c;也可以将其简单的理解为是在自己原本的手续费之外&#xff0c;额外增加的一些交易成本。 不过随着外汇市场的发展&#xff0c;在外汇交易平台进行交易也是越来越正规化&#xff0c;现如今正…

16-luogu-P1012-[NOIP1998 提高组] 拼数

文章目录[NOIP1998 提高组] 拼数题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1样例 #2样例输入 #2样例输出 #2提示大神代码分析总结[NOIP1998 提高组] 拼数 题目描述 设有 nnn 个正整数 a1…ana_1 \dots a_na1​…an​&#xff0c;将它们联接成一排&#xff0c;相邻…

shell语法总结二(持续补充)

文章目录一、函数1、函数的定义格式2、案例13、案例2二、函数参数三、输入/输出重定向1、标准输入输出2、输出重定向&#xff1a;2.1、语法如下所示:2.2、案例&#xff1a;输出重定向会覆盖文件内容&#xff0c;请看下面的例子&#xff1a;2.3、如果不希望文件内容被覆盖&#…

不同时期土地政策

土地政策​ 本篇文章主要总结新中国近代以来的土地政策&#xff0c;根据中国共产党的建立的前后时间分为两个部分。建党前主要是太平天国的《天朝田亩制》、孙中山的“旧三民主义”和新三民主义&#xff0c;建党后的大革命时期、土地革命时期、抗日战争、解放战争、新中国成立初…

Java中判断字符串是否为空

文章目录0 写在前面1 字符串.isEmpty2 .equals(字符串)3 字符串.length()>0注意事项0 写在前面 isEmpty(); "".equals(); .lenth()>01 字符串.isEmpty 这个方法是比较常用的&#xff0c; 格式&#xff1a;字符串.isEmpty();结果为true代表字符串为空&#xf…

5个超酷的Python学习工具,不看后悔。

工欲善其事必先利其器&#xff0c;一个好的工具能让起到事半功倍的效果&#xff0c;Python社区提供了足够多的优秀工具来帮助开发者更方便的实现某些想法&#xff0c;下面这几个工具给我的工作也带来了很多便利&#xff0c;推荐给追求美好事物的你。 Python Tutor Python Tut…

已解决json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

已解决raise JSONDecodeError(“Expecting value”, s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0) 文章目录报错代码报错翻译报错原因解决方法帮忙解决报错代码 粉丝群一个小伙伴想用Python读取json报错&#xff0c;但是…

Anaconda和Python的安装源配置

Anaconda安装&#xff1a; https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda换源&#xff1a; 清华anaconda镜像&#xff1a; conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/ conda config --add channels https://…

计算机系统实验-BufLab

一.实验题目及目的 1.实验题目 程序运行在linux环境中&#xff0c;从输入获得一个字符串&#xff0c;将这个字符串放入指定的buf处&#xff0c;buf的大小为32&#xff0c;需要分析栈帧、buf位置等信息&#xff0c;通过输入字符串使缓冲区溢出&#xff0c;完成指定的函数调用等…

聊聊什么是gRPC

前言 现如今&#xff0c;微服务变得越来越流行&#xff0c;而服务间的通信也变得越来越重要&#xff0c;服务间通信本质是交换信息&#xff0c;而交换信息的中介/桥梁正是我们的API。 诚然&#xff0c;目前构建API最受欢迎的仍然是使用Restful&#xff08;HTTP-JSON&#xff…

我学Python的那段日子(一)变量和简单数据类型

1.Python中的变量和简单数据类型&#xff08;一&#xff09; 1.1关于Python中的输出函数 使用 print()如&#xff1a; print("Hello,Python");在ide中显示的结果为 1.2 Python中的变量 所谓的变量即是可以用来保存数据的一个参数&#xff0c;变量的值是可变的。…

最短木板长度 华为OD真题 100

import java.util.Scanner; import java.util.*; import java.util.stream.Collectors;class Main {public static int min_num;public static void main(String[] args) {// 处理输入Scanner in new Scanner(System.in);int n in.nextInt();int m in.nextInt();in.nextLine…

小蓝本 第一本 《因式分解技巧》 第七章 综合运用 笔记 (第七天)

小蓝本 第一本 《因式分解技巧》 第七章 综合运用 笔记 &#xff08;第七天&#xff09;前言换元法好题例2题目解法经验补充例3题目解法经验例5题目解法补充例9题目解法经验补充例10题目解法补充例11题目解法补充例13题目解法习题7题目题解错题题号改错前言 12天攻掉《因式分解…

【笔记】计算机组成原理复习重点——篇1

计算机组成原理复习重点笔记 计算机组成原理计算机体系结构 学科基础必修课 研究生入学考试全国联考45分&#xff0c;占比30% 64学时&#xff0c;4学分&#xff0c;上课56&#xff0c;实验8 教材&#xff1a;计算机组成原理(第二版 ) 唐朔飞 高等教育出版社 目录 第1篇 概论 第…