Spring Boot两种格式的配置文件,你都了解吗?

news2024/11/22 21:18:39

目录

前言

一、properties配置文件

1.1、语法格式

1.2、读取配置文件

1.3、缺点分析

2、yml配置文件

2.1、yml语法

2.1.1、注意:value值的单双引号

2.2、yml配置读取

2.3、yml配置的不同数据类型

2.4、yml配置对象

2.5、yml配置集合

3、面试:properties 和 yml 配置文件有什么区别?

4、不同环境中的配置文件


前言


        Spring Boot中的配置文件是是干什么的?主要是用来写 “系统配置文件(例如端口号设置,数据库连接设置)” 和 “用户自定义配置文件”,书写格式有两种“.properties” 和 “.yml” ,接下来我们就一起来了解以下这两种格式吧~

一、properties配置文件


 

properties 配置文件是最早的配置文件格式,也是 Spring Boot 项目的默认配置文件(两种格式的配置文件中,properties的优先级最高,会先被加载)。

1.1、语法格式

properties 是以键值对的形式进行配置的,在 key 和 value 之间通过“=”连接,如下代码:

# 配置端口号
server.port=8080

# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=1234

Ps:

1.配置文件是通过"#"来添加注释信息的;

2.每一个关键字之间的"."号是只层级关系;

3.注释后面可以不加空格,这是个人习惯~

1.2、读取配置文件

在 Spring Boot 项目中,可以使用 @Value 注解通过“${}”的格式来读取配置文件信息,如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class ReadProperties {

    @Value("${server.port}")
    private String port;

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

}

执行结果如下:

Ps:被Component注解的对象在 Spring Boot 启动时会被注入到框架中,注入到框架中的时候会执行 @PostConstruct 初始化方法。

1.3、缺点分析

例如刚刚在配置文件中连接数据库的数据就存在一些冗余信息,如下:

另外还存在一些中文编码问题...

想要解决如上问题,就需要使用yml配置文件了~

2、yml配置文件


 

yml格式可读性、写法简单、便于理解,和JSON语言类似,并且支持更多的数据类型,例如清单(数组)、散列表、标记等数据形态,最重要的一点是它支持更多的编程语言(因为企业中每个部门干的活不一样,开发使用的语言也可能不相同),如Java、Golang、PHP、Python、Ruby、 JavaScript、Perl等。

2.1、yml语法

yml的语法类似于键值对的写法,基础语法是:“key: value”,值得注意的一点是,value的前面还有一个空格,这个空格是不可省略的

例如使用yml格式配置文件,连接数据库:

#配置端口号
server:
  port: 8888

# 连接数据库
spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/test?characterEncoding=utf8
    username: root
    password: 1234

2.1.1、注意:value值的单双引号

在yml中,不加引号和单引号效果相同(都会将特殊字符自动转义成原始字符),双引号则区别于前者(不会自动转义,例如 \n 在双引号里就表示换行)

如下Spring Boot代码:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ReadYml {

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

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

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

    @PostConstruct
    public void PostConstruct() {
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
    }

}

如下yml配置文件 

string:
  str1: hello \n world!
  str2: 'hello \n world!'
  str3: "hello \n world!"

通过@Value注解分别读取,执行结果如下:

 

2.2、yml配置读取

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

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ReadYml {

    @Value("${server.port}")
    private String port;

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

}

执行结果如下:

 

2.3、yml配置的不同数据类型

yml可以配置很多的数据类型,甚至是null,如下代码:

# 字符串

string.value: Hello


# 布尔值,true或false

boolean.value: true

boolean.value1: false


# 整数

int.value: 10

int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制


# 浮点数

float.value: 3.14159

float.value1: 314159e-5 # 科学计数法


# Null,~代表null

null.value: ~

2.4、yml配置对象

在yml中配置对象,如下:

  student:
    id: 1
    name: 周杰伦
    age: 18

或者是使用行内写法:

 student: {id: 1, name: 周杰伦, age: 18}

此时,在yml中,对象的读取就不能使用 @Value 注解了,而是要使用另一个注解 @ConfigurationProperties 来读取(此注解的参数是一个键值对形式,prefix = “yml中的对象名称”,或者参数直接写yml中对象的名称),并且这个注解需要搭配这个对象的实体类(1.属性名必须要以yml配置中的key值一致,2.必须有setter和getter方法,因为需要这两个方法初始化实体类对象),具体的代码如下:

实体类如下:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@ConfigurationProperties(prefix = "student")
//或者直接写:@ConfigurationProperties("student")
@Component
@Data
public class Student {

    private int id;
    private String name;
    private int age;

}

调用类代码如下:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ReadStudent {

    @Autowired
    private Student student;

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

}

执行结果如下:

注意事项:

2.5、yml配置集合

yml配置文件也可以配置list集合,如下:

student:
  stu1:
    - 周杰伦
    - 林俊杰
    - 薛之谦

或者使用行内写法,如下:

student: {stu1: [周杰伦,林俊杰,薛之谦]}

读取对象也是通过@ConfigurationProperties 来读取,如下:

实体类:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

import java.util.List;

@ConfigurationProperties("student")
@Data
@Component
public class ListStudent {

    private List<String> stu1;

}

调用类:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class ReadListStudent {

    @Autowired
    private ListStudent listStudent;

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

}

执行结果:

3、面试:properties 和 yml 配置文件有什么区别?


  • properties是以 key=value 的形式配置的键值对类型的配置文件,yml则是以 key: value 类似JSON格式的树形配置方式进行配置,层级之间采用缩进,且value前的空格不可省略。
  • properties 为早期并且默认的配置⽂件格式,但存在一定的冗余数据,使用yml可以很好的解决冗余问题。
  • yml通用性更好,支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使⽤⼀份 配置⽂件作为 Java 和 Go 的共同配置⽂件。
  • yml ⽀持更多的数据类型。

4、不同环境中的配置文件


实际的工作中,我们可能会面临两种环境,分别是“生产环境” 和 “开发环境”,而针对于这两种环境,我们需要使用不同的yml配置文件(假设以yml为例),一般我们命名为如下两种形式:

  • application-dev.yml
  • application-prod.yml

第一个是开发环境,第二个是生产环境。

Ps:文件的开头的 “application-”是固定的,在这后面的我们可以自定义。

那么我们该如何在 application.yml 中配置到底运行哪个环境呢?

通过如下代码即可任意写换(例如配置成dev开发环境):

spring:
  profiles:
    active: dev

Ps:一个配置文件中只能有一个spring关键字

 

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

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

相关文章

2023年浙江道路运输安全员考试真题题库及答案

百分百题库提供道路运输安全员考试试题、道路运输安全员考试预测题、道路运输安全员考试真题、道路运输安全员证考试题库等,提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 1.关于道路运输企业车辆技术管理机构的主要职责&#xff0c;在下列表述中最…

anaconda3文件夹被移动之后,如何操作可以复用原有conda环境

anaconda3文件夹被移动A-调整conda PATH地址B-更改.conda/environments.txt中的地址C-修改conda内的变量和每个环境的pip目录A-调整conda PATH地址 B-更改.conda/environments.txt中的地址 a. 优先切换到用户根目录 b. 查看隐藏conda目录 c. 编辑 vi .conda/environments.txt…

【服务器数据恢复】NetApp存储无法访问的数据恢复案例

服务器数据恢复环境&#xff1a; NetApp某型号存储&#xff1b; 配备SAS硬盘&#xff0c;该硬盘520字节一个扇区&#xff1b; 所有的lun映射到小型机使用&#xff0c;存放Oracle数据库文件&#xff0c;采用ASM裸设备存储方式。 服务器故障&#xff1a; 管理员误操作删除NetApp…

介电常数常用测量方法综述

张扬1&#xff0c;徐尚志1&#xff0c;赵文晖2&#xff0c;龚增2&#xff0c;赵晓群1 1同济大学&#xff0c;上海 2上海市计量测试技术研究院&#xff0c;上海 在设计电路、天线、电容器等过程中经常会涉及所用材料的介电常数, 所以深入了解介电常数的相关概念对实际工作有重…

【RuoYi-Vue-Plus】学习笔记 48 - 数据加密功能 Encrypt 源码分析

文章目录前言参考目录功能实现的准备知识1、目录结构说明2、一些准备知识2.1、自定义插件如何实现&#xff1f;2.2、Mybatis 拦截器的拦截点&#xff1f;2.3、关于 Intercepts 注解&#xff1f;2.4、关于拦截器中的 Interceptor() 方法和 plugin() 方法&#xff1f;功能调用流程…

企业数字化转型中信息化是什么

数字化转型带给企业的价值无疑是能够支撑起这股热潮的&#xff0c;这种流行趋势在数字化时代也并不意外。不过有一点值得注意&#xff0c;那就是数字化转型毕竟发展时间还不太长&#xff0c;虽然有未来加持&#xff0c;但又有多少企业能够在当下坚持数字化转型&#xff0c;顺利…

MYSQL的第四次索引视图

题目&#xff1a; 学生表&#xff1a;Student (Sno, Sname, Ssex , Sage, Sdept) 学号&#xff0c;姓名&#xff0c;性别&#xff0c;年龄&#xff0c;所在系 Sno为主键 课程表&#xff1a;Course (Cno, Cname,) 课程号&#xff0c;课程名 Cno为主键 学生选课…

[数据库迁移]-MySQL常见问题

[数据库迁移]-MySQL常见问题 森格 | 2023年2月 介绍&#xff1a;记录在MySQL数据库迁移过程中遇到的问题&#xff0c;以及解决方案。 文章目录[数据库迁移]-MySQL常见问题一、背景二、常见问题2.1 ERROR 20032.2 ERROR 12732.3 ERROR 10712.4 视图权限2.5 ERROR 1062三、总结一…

idea提交git时过滤掉不必要的文件 mes

.ignore插件的安装非常简单&#xff0c;如下图所示&#xff1a; 1.添加.gitignore 在项目上创建 在打开的面板中&#xff0c;执行如下图所示的选择&#xff1a; 3.在本地项目下文件上创建需要过滤文件后缀名 ### Example user template template ### Example user templa…

算法笔记(五)—— 二叉树

链表练习题&#xff1a; 1. 查两个链表的第一个入环结点&#xff0c;loop1,loop2。&#xff08;快慢指针&#xff0c;相交后&#xff0c;快指针放头节点&#xff09; 2. 当loop1null , loop2null时 如果两个链表最后一个结点不相等&#xff0c;那么一定不相交。 最后一个结点地…

Allegro如何设置最大撤回步数操作指导

Allegro如何设置最大撤回步数操作指导 在做PCB设计的时候,偶尔会出现误操作或者简单评估需要撤回到原来的状态,避免返工。Allegro支持撤回操作,用菜单的Undo命令即可实现 同样还支持设置最大的撤回步数,具体操作如下 点击Setup点击User Preferences

C语言(ctype.h系列的字符函数)

1.字符测试函数 函数名 如果时下列函数时&#xff0c;返回值为真 Isalnum&#xff08;&#xff09; 字母或数字 isalpha&#xff08;&#xff09; 字母 isblank&#xff08;&#xff09; 标准的空白字符&#xff08;空格&#xff0c;水平制表符或换行符&#xff09;或任…

AMD发布23.2.1 新驱动 支持开年新作《魔咒之地》

如果说2023年有什么新作&#xff0c;《魔咒之地&#xff08;Forspoken&#xff09;》当属开年大作之一&#xff0c;1月25日才在steam平台发售。虽然开售后的表现似乎不如想象中优秀&#xff0c;加之价格相对昂贵&#xff0c;令不少玩家望而却步&#xff0c;但如果只是想尝鲜&am…

面试攻略,Java 基础面试 100 问(二)

五大基本原则 单一职责原则SRP(Single Responsibility Principle) 是指一个类的功能要单一&#xff0c;不能包罗万象。如同一个人一样&#xff0c;分配的工作不能太多&#xff0c;否则一天到晚虽然忙忙碌碌的&#xff0c;但效率却高不起来。 开放封闭原则OCP(Open&#xff0…

ACM第一周---周训---题目合集.

&#x1f680;write in front&#x1f680; &#x1f4dd;个人主页&#xff1a;认真写博客的夏目浅石.CSDN &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​ &#x1f4e3;系列专栏&#xff1a;ACM周训练题目合集.CSDN &#x1f4ac;总结&#xff1a…

QT入门Input Widgets之QFontComboBox、QTextEdit、QPlainTextEdit、QDial、QKeySequenceEdit

目录 一、QFontComboBox的相关介绍 1、实际使用 二、QTextEdit与QPlainTextEdit 三、QDial的相关介绍 四、QKeySequenceEdit的相关介绍 此文为作者原创&#xff0c;创作不易&#xff0c;转载请标明出处&#xff01; 一、QFontComboBox的相关介绍 1、实际使用 一般使用较…

Java 中FastJson的使用【吃透FastJson】

如果不了解JSON格式&#xff0c;建议先看下&#xff1a;JSON数据格式【学习记录】 JSON序列化、反序列化JavaBean的框架有很多&#xff0c;最常见的Jackson、阿里巴巴开源的FastJson、谷歌的GSON、apache提供的json-lib等&#xff0c;下面我们主要来熟悉一下&#xff1a;Java语…

时隔多年,这次我终于把动态代理的源码翻了个地儿朝天

本文内容整理自 博学谷狂野架构师 动态代理简介 ​ Proxy模式是常用的设计模式&#xff0c;其特征是代理类与委托类有同样的接口&#xff0c;代理类主要负责为委托类预处理消息、过滤消息、把消息转发给委托类&#xff0c;以及事后处理消息等。 用户可以更加结构图&#xff0…

软件项目进度安排与跟踪:关键路径的计算

在一个软件项目中&#xff0c;管理人员需要按时了解项目进度&#xff0c;制定项目计划&#xff0c;同时需要及时发现所遇到的问题&#xff0c;然后和团队成员制定解决方案&#xff0c;确保整个计划可以顺利的进行&#xff0c;因此项目进度安排与跟踪是项目管理中的一个重要环节…

SpringBoot 整合 Nacos 实现注册中心和配置中心

SpringBoot 整合 Nacos 引入 Maven 依赖 首先&#xff0c;我们还是要引入 Maven 依赖&#x1f447; <!--注册中心的依赖--> <dependency><groupId>com.alibaba.boot</groupId><artifactId>nacos-discovery-spring-boot-starter</artifactI…