SpringBoot配置文件(properties与yml详解)

news2025/1/4 20:14:23

目录

一,SpringBoot配置文件

1,配置文件的作用

2,配置文件的格式

二,properties 配置文件说明

1,properties 基本语法

2,读取配置文件

 3,properties 的缺点

三,yml配置文件说明

1,yml 基本语法

 2,yml配置不同的数据类型

3,yml读取配置文件

读取普通变量:

 读取对象(需要使用注解@ConfigurationProperties):

读取字符串:

4,yml的优点分析

四,properties VS yml


一,SpringBoot配置文件

1,配置文件的作用

整个项目中所有重要的数据都是在配置文件中配置的,比如:
  • 数据库的连接信息(包含用户名和密码的设置);
  • 项目的启动端口;
  • 第三方系统的调用秘钥等信息;
  • 用于发现和定位问题的普通日志和异常日志等.

2,配置文件的格式

SpringBoot配置文件主要分为两种:

  • .properties
  • .yml

  1.  理论上讲 properties 可以和 yml ⼀起存在于⼀个项目当中,当 properties 和 yml ⼀起存在⼀个项目中时,如果配置文件中出现了同样的配置,比如 properties 和 yml 中都配置了“server.port”,那么这个时候会以 properties 中的配置为主,也就是 .properties 配置文件的优先级最高,但加载完 .properties 文件之后,也会加载 .yml 文件的配置信息;
  2.  虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置文件格式,这样可以更好的维护(降低故障率)。

二,properties 配置文件说明

properties配置文件是最早期的配置文件,也是创建SpringBoot项目的默认文件

1,properties 基本语法

properties 是以键值对的形式进行书写的,key与value之间是以“=”连接的;

2,读取配置文件

properties 配置文件中所配置的内容(不管是系统配置项还是自定义配置项)都可以被读取到,需要使用@Value注解,假设需要获取配置文件中的端口号:

//配置文件
server.port=8080
spring.datasource.url=jdbc:mysql://127.0.0.1/student?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root

//读取配置文件类
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@ResponseBody //当前类中所有的方法返回的是非静态页面的数据
public class TestController {
    @Value("${server.port}")
    private int port;//需要定义一个变量 目的就是把从配置文件中读取到的内容赋值给这个变量

    @RequestMapping("/sayHi")
    public String sayHi() {
        return "hello world -> " + port;
    }
}

 在浏览器中输入URL获取页面:

 3,properties 的缺点

以刚刚上述的properties 配置文件来说,我们可以发现properties 类型的配置文件key值存在较多的冗余信息,于是便有了yml配置文件来简化代码.

三,yml配置文件说明

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中文就是“另⼀种标记语 语言”.

1,yml 基本语法

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

 以数据库连接为例书写yml配置文件:

 2,yml配置不同的数据类型

# 字符串
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: ~

3,yml读取配置文件

yml读取配置文件的方式和properties 相同,使用@Value注解即可;

读取普通变量:

//配置文件
server:
  port: 8080

//读取类
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;


@Controller
@ResponseBody //当前类中所有的方法返回的是非静态页面的数据
public class TestController {
    @Value("${server.port}")
    private int port;//需要定义一个变量 目的就是把从配置文件中读取到的内容赋值给这个变量

    @RequestMapping("/sayHi")
    public String sayHi() {
        return "hello world -> " + port;
    }
}

 读取对象(需要使用注解@ConfigurationProperties

//配置文件
student:
  id: 1
  name: 张三
  age: 18

//Student类
package com.example.demo.entity;

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;


@ConfigurationProperties("student")
@Component
@Setter     //setter方法一定不能少 因为你从配置文件中拿到的数据必须通过setter方法才能赋值给对象
@Getter
@ToString
public class Student {
    private int id;
    private String name;
    private int age;

}

//读取类
package com.example.demo.controller;

import com.example.demo.entity.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.PostConstruct;



@Controller
@ResponseBody //当前类中所有的方法返回的是非静态页面的数据
public class TestController {
    @Autowired
    private Student student;

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

 注意:这里的Student类必须提供所有属性的getter和setter方法(或者注入lombok依赖的话加上@Setter和@Getter注解),因为从配置文件中拿到的数据必须通过setter方法才能赋值给对象!

读取字符串:

//配置文件
String:
  str1:  Hello \n Spring Boot
  str2:  'Hello \n Spring Boot'
  str3:  "Hello \n Spring Boot"

//读取类
package com.example.demo.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.PostConstruct;

@Controller
@ResponseBody //当前类中所有的方法返回的是非静态页面的数据
public class TestController {
    @Value("${String.str1}")
    private String str1;
    @Value("${String.str2}")
    private String str2;
    @Value("${String.str3}")
    private String str3;

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

 注意:

  1. 字符串默认不用加上单引号或者双引号;
  2. 单引号会转义特殊字符,特殊字符最终只是一个普通的字符串数据;
  3. 双引号不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思.

4,yml的优点分析

  • yml 是⼀个可读性高,写法简单、易于理解,它的语法和 JSON 语言类似;
  • yml 支持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等;
  • yml 支持更多的编程语言,它不止是 Java 中可以使用在 Golang、PHP、Python、Ruby、 JavaScript、Perl 中.

四,properties VS yml

  • properties 是以 key=value 的形式配置的键值类型的配置文件,而 yml 使用的是类似 json 格式的树形配置⽅式进⾏配置的,yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用“: ”英文冒号加空格的方式设置,并且空格不可省略;
  • properties 为早期并且默认的配置文件格式,但其配置存在⼀定的冗余数据,使用 yml 可以很好的解决数据冗余的问题;
  • yml 通用性更好,支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使用⼀份配置文件作为 Java 和 Go 的共同配置文件;yml 支持更多的数据类型.

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

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

相关文章

掌握Linux指令和权限:一个入门教程

目录 一.Linux基本指令1.ls指令2.pwd指令3.cd指令4.touch指令5.mkair指令6.rmdir和rm指令 一.Linux基本指令 1.ls指令 语法格式:ls [选项][目录或者文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件,将列出文件名以及其…

Chrome扩展开发指南

前言 Chrome 扩展(通常也叫插件)也是软件程序,使用 Web(HTML, CSS, and JavaScript)技术栈开发。允许用户自定义 Chrome 浏览体验。开发者可以通过增加特效或功能来优化体验。例如:效率工具、信息聚合等等。…

数据结构考研版——KMP算法

一、 我们先看下面这个算法当比较到不匹配的时候 模式串后移一位,并且让比较指针回去,这就叫做指针的回溯,回溯就是造成这个简单算法效率比较低的原因 这种是朴素模式匹配算法,时间复杂度比较高 int index(Str str,Str substr…

MAVEN安装与配置

文章目录 一、安装MAVEN二、在IDEA中进行配置 一、安装MAVEN 打开MAVEN官网下载:https://maven.apache.org/download.cgi 选择这两个进行下载,然后直接解压缩到指定的安装目录即可。 配置环境变量 1)MAVEN_HOME设置为maven的安装目录 2&…

指令段间及文件间参数调用过程(64位 Intel架构)

指令段间及文件间参数调用过程(64位 Intel架构) 文章目录 指令段间及文件间参数调用过程(64位 Intel架构)一. 指令段间的参数调用过程1.1 推论1.2 验证 二. 文件间的参数调用过程2.1 推论2.2 验证 三. 指令解释相关补充 一. 指令段…

基于html+css的图片展示24

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

docker安装rocketMQ

1、安装jkd1.8 docker pull java:8 或者 docker pull openjdk:8 查看已安装的镜像: docker images 运行jdk命令 docker run -d -it --name java-8 java:8 进入JDK 容器 docker exec -it java-8 /bin/bash 查看java版本,进入java-8容器后输入 &#x…

金融数字新型基础设施创新开放联合体今日成立

4月18日,“金融数字新型基础设施创新开放联合体”(以下简称:联合体)在上海成立。联合体由上海银行、复旦大学金融科技研究院、中电金信共同发起,首批成员单位汇聚产业链与供给侧的中坚力量:国泰君安证券、太…

基于 BaiduAI 的人脸检测系统(PyQt5图形化界面实现)

文章目录 写在前面的话总体结构学生端教师端教务处系统 总结 写在前面的话 前几天有个小伙伴私我会不会做关于人脸检测与识别的小项目,奈何我现在主要是学习研究NLP了,所以关于CV的很多东西也有点力不从心,突然想起来去年我的毕业设计就是做…

【Vue】学习笔记-内置指令/自定义指令

内置指令 自定义指令 内置指令v-text 指令v-html指令v-cloak指令v-once指令v-pre指令 自定义指令 内置指令 我们学过的指令: v-bind : 单向绑定解析表达式, 可简写为 :xxx v-model : 双向数据绑定 v-for : 遍历数组/对象/字符串 v-on : 绑定事件监听, 可简写为 v…

遍历思路与子问题思路:详解二叉树的基本操作

二叉树的结构定义: public class BinaryTree {//内部类 表示一个结点static class TreeNode {TreeNode left; //左子树TreeNode right; //右子树char value; //结点值TreeNode(char value) {this.value value;}}public TreeNode root; //根节点... } …

云原生时代下,应用全生命周期管理之道

引言 过去 10 年间,云计算已经从单一的 IT 服务演变成为新一代的软件架构范式,进而赋能企业管理和生产模式的创新。云计算也经历了从“资源上云”到“深度用云”的发展阶段。 在云原生时代,应用全生命周期管理之道成为企业关注的一个焦点。在…

蓝牙耳机什么品牌的音质好?300左右音质最好的蓝牙耳机推荐

随着蓝牙技术的发展,蓝牙耳机品牌也越来越多。要说什么品牌的音质好?首先还是要根据自己的预算出发。在此,我来给大家推荐几款300左右音质最好的蓝牙耳机,可以当个参考。 一、南卡小音舱Lite2蓝牙耳机 参考价:239 发…

Self-supervised learning of a facial attribute embedding from video

Self-supervised learning of a facial attribute embedding from video 译题:视频中人脸属性嵌入的自监督学习 论文题目Self-supervised learning of a facial attribute embedding from video译题视频中人脸属性嵌入的自监督学习时间2018年开源代码地址https://…

《Java》基本类型的比较和引用类型的比较

目录 基本类型 引用数据类型 基本类型之间的比较 基于Comparable的比较 总结 👑作者主页:Java冰激凌 📖专栏链接:Java 基本类型 Java中提供了基本类型有八种 分别是 byte short int long float double char boolean 基本类型…

EL 表达式--各种运算-代码演示--EL 的 11 个隐含对象--pageContext 对象介绍--JSTL 标签库介绍--core 核心库--综合代码

目录 EL 表达式 EL 表达式介绍 代码示例 EL 常用输出形式 代码演示 Book.java el_input.jsp EL 运算操作 基本语法语法: 关系运算 逻辑运算 算数运算 EL 的 empty 运算 应用实例 empty.jsp EL 的三元运算 应用实例 EL 的 11 个隐含对象&#xff0c…

Unity-ML-Agents-训练生成的results文件解读-PushBlock

前言 训练结果文件路径:E:\ml-agents-release_19\results\push_block_test_02(具体路径以自己电脑为准) ML-Agents安装和PushBlock训练过程请见:(注意:push_block_test_02没有全部训练完毕) …

同样是测试,朋友到了30k,我才12K,这份测试面试8股文确实牛

程序猿在世人眼里已经成为高薪、为人忠诚的代名词。 然而,小编要说的是,不是所有的程序员工资都是一样的。 世人所不知的是同为程序猿,薪资的差别还是很大的。 众所周知,目前互联网行业是众多行业中薪资待遇最好的,…

推荐几款项目管理工具,提高你的团队协作效率

如何管理团队才能使团队发挥最大的价值,如果团队缺少协作,就会因为团队的内耗和冲突导致项目无法完成,如何提高团队协作效率呢?我们可以借助团队协作类的项目管理工具。 几个常见的项目管理工具: 1、进度猫 进度猫是…

MySQL高级第十五篇:MVCC多版本并发控制原理剖析

MySQL高级第十五篇:MVCC多版本并发控制原理剖析 一、什么是MVCC?二、快照读与当前读?1. 快照读2. 当前读 三、MVCC实现原理(ReadView)1. 隐藏字段2. Read View3. 思路设计4. ReadView使用规则5. MVCC整体操作流程 四、…