SpringBoot配置文件 —— 超详细全方位教程

news2024/11/16 18:38:38

🧸欢迎来到dream_ready的博客,📜相信您也对这篇博客也感兴趣o (ˉ▽ˉ;)

🧸祝诸君前程似锦,归来仍初心不忘!

📜Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习-CSDN博客

目录

1、配置文件的作用 / 什么是配置文件?

什么是配置文件

配置文件的作用?

常规作用

SpringBoot中配置文件的作用

2、SpringBoot中的配置文件及格式

3、配置文件的优先级

4、properties配置文件详解及语法

5、properties缺点分析

6、yml配置文件详解及语法

使用yml连接数据库

yml配置不同数据类型及null

7、读取配置文件

读取properties格式的配置文件

读取yml中的配置文件

8、value中的转义字符和单双引号

9、配置对象

10、配置集合

11、配置Map

12、yml 优缺点


1、配置文件的作用 / 什么是配置文件?

什么是配置文件

        配置文件是包含应用程序或系统配置信息的文件。这些文件通常用于存储和管理应用程序的设置,以便在运行时进行配置和自定义。配置文件可以采用不同的格式,如文本文件、JSON、XML、YAML等,具体格式取决于应用程序的需求和开发者的偏好。

        计算机上有数以千计的配置⽂件,我们使⽤的绝⼤多数软件,⽐如浏览器,微信,Idea,甚⾄电脑,手机,都离不开配置⽂件。我们可能永远不会直接与其中的⼤部分⽂件打交道,但它们确实以不同的形式散落在我们的计算机上,⽐如C:\Users, C:\Windows⽂件夹,以及各种 *.config, *.xml ⽂件

配置文件的作用?

常规作用

        配置⽂件主要是为了解决硬编码带来的问题, 把可能会发⽣改变的信息, 放在⼀个集中的地⽅, 当我们启动某个程序时, 应⽤程序从配置⽂件中读取数据, 并加载运⾏

硬编码是将数据直接嵌⼊到程序或其他可执⾏对象的源代码中, 也就是我们常说的“代码写死

使用配置文件,可以使程序完成用户和应用程序的交互,或者应用程序与其他应用程序的交互

SpringBoot中配置文件的作用

主要解决硬编码的问题,很多项目或者框架的配置信息也放在配置文件中,比如:

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

2、SpringBoot中的配置文件及格式

        SpringBoot⽀持并定义了配置⽂件的格式,也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的

SpringBoot的配置文件,有三种格式

  • properties
  • yml
  • yaml

后两者其实是同一种类型的配置文件yml为yaml的简写,实际开发中出现频率最⾼. yaml 和yml 的使⽤⽅式⼀样

但事实上只支持三个文件(.前的命名必须是application这个单词)

  • applicaion.properties
  • applicaion.yml
  • applicaion.yaml

当然,后两者其实也是同一种文件

当应⽤程序启动时,Spring Boot会⾃动从classpath(类路径)中找到并加载

application.properties 和 application.yaml 或者 application.yml ⽂件.

如下图所示:


3、配置文件的优先级

  • 如果项目中,同时存在properties和yml配置文件,properties的优先级更高
  • 同时存在时,两个文件都生效
  • 如果两个文件中,都包含同一个配置,以properties为主

注:企业开发中,通常只使用其中一个文件


4、properties配置文件详解及语法

properties 是以键值对的形式配置的,key 和 value 之间是以 "=" 连接的

key的格式建议是小写,单词之间使用.分割

代码如下:

# 配置项⽬端⼝号
server.port=8080
# 配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&
spring.datasource.username=root
spring.datasource.password=root

注:配置文件中使用 “#” 来添加注释信息

本篇博客会讲解一部分常用配置信息,若想查看更多配置信息,可以参考官网

SpringBoot配置

5、properties缺点分析

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

从上述配置key看出,properties配置文件中会有很多冗余的信息

想要解决这个问题,就可以使用yml配置文件的格式化了(实际工作中也是yml用的更多)


6、yml配置文件详解及语法

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

yml基本语法:

  • yml 是树形结构的配置⽂件,它的基础语法是"key: value"
  • key 和 value 之间使⽤英⽂冒号加空格的⽅式组成,空格不可省略

基础语法如下:

第⼀项的配置为正确的,key 也是⾼亮显⽰的.,第⼆项没有空格是错误的使⽤⽅式,第⼆项的 key 也 没有⾼亮显⽰

使用yml连接数据库

yml使用举例:

ip地址,端口号,数据库库名(此处是mycnblog)要根据实际情况修改

spring:
  datasource:
    url: jdbc:mysql://127.0.0.1:3306/mycnblog?characterEncoding=utf8&useSSL=false
    username: root
    password: root

yml配置不同数据类型及null

# 字符串
String:
  value: hello

# 布尔值,true或false
boolean:
  value1: true
  value2: false
  
# 整数,只要最后的数字是整数就行,和前面的key名称没关系
int:
  value: 10
  
# 浮点数,只要最后的数字是浮点数就行,和前面的key名称没关系
float:
  value: 3.14159
  
# ~ 表示null,只要最后的符号是 ~ 就行,和前面的key名称没关系
null:
  value: ~
  
# "" 空字符串
# '' 单引号也表示空字符串
# 冒号后面什么都不加也可以表示空字符串。但这种方式不直观,更多的表示是使用引号括起来
empty:
  value1: ''
  value2: ""
  value3: 

7、读取配置文件

读取properties格式的配置文件

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @Value 注解来实现。 @Value 注解使⽤" ${} "的格式读取

properties 配置如下:

mykey.key1 = bite

读取代码如下:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PropertiesController {
    @Value("${mykey.key1}")
    private String key1;

    @RequestMapping("/key")
    public String key(){
        return "读取到值:"+key1;
    }
}

最终执行效果

读取yml中的配置文件

yml 读取配置的⽅式和 properties 相同,使⽤ @Value 注解即可,@Value 注解使⽤" ${} "的格式读取

yml格式是换行有缩进的,去掉换行,缩进和冒号,每两个单词间用.分割,和properties书写格式一样

实现代码如下:

string:
  hello: bite

读取代码如下:

@RestController
public class ReadYml {
    @Value("${string.hello}")
    private String hello;

    @RequestMapping("/ymlKey")
    public String key(){
        return "读取到值:"+hello;
    }
}

最终执行效果:


8、value中的转义字符和单双引号

此处以yml格式举例

  • 字符串默认不⽤加上单引号或者双引号。
  • 单引号会转义特殊字符,使其失去特殊功能,始终是⼀个普通的字符串. 
  • 双引号不会转义字符串⾥⾯的特殊字符,特殊字符会表⽰本⾝的含义
  • 此处的转义理解起来会有些拗, \n 本意表⽰的是换⾏
  • 使⽤单引号会转义, 就是说, \n 不再表⽰换⾏了, ⽽是表⽰⼀个普通的字符串
  • 使⽤双引号不会转义, 表⽰ \n 表⽰的是它本⾝的含义, 就是换⾏

代码举例:

String:
  str1: Hello \n Spring Boot.
  str2: 'Hello \n Spring Boot.'
  str3: "Hello \n Spring Boot."

读取代码如下: 

@RestController
public class ReadYml {
    @Value("${string.str1}")
    private String str1;
    
    @Value("${string.str2}")
    private String str2;
    
    @Value("${string.str3}")
    private String str3;
    
    @RequestMapping("/yml")
    public String readYml(){
        System.out.println(str1);
        System.out.println(str2);
        System.out.println(str3);
        return "yml";
    }
}

最终执行效果:


9、配置对象

此处以yml格式举例

要使⽤注解 @ConfigurationProperties 来读取,注解括号内属性填写key中的“老大”

student:
  id: 1
  name: Java
  age: 18

或者是使⽤⾏内写法(与上⾯的写法作⽤⼀致):

student: {id: 1,name: Java,age: 18}

实体类定义如下:

注意 @ConfigurationProperties 的用法,用了prefix属性,并将key的“老大”赋值给它

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

// 下面这个注解起到读取配置文件对应内容并赋值给该类的操作
@ConfigurationProperties(prefix = "student")
@Component
@Data
public class Student {
    private int id;
    private String name;
    private int age;
}

调⽤类的实现如下:

@RestController
public class StudentController {
    @Autowired
    private Student student;

    @RequestMapping("/readStudent")
    public String readStudent() {
        return student.toString();
    }
} 

最终执行效果:


10、配置集合

此处以yml格式举例

要使⽤注解 @ConfigurationProperties 来读取,注解括号内属性填写key中的“老大”

配置内容(注意格式):

-后一定要加空格

如果不加空格,这部分内容会变成一个整体,统一赋值给对应属性

dbtypes:
  name:
  - mysql
  - sqlserver
  - db2

实体类如下:

@Component
@ConfigurationProperties("dbtypes")
@Data
public class ListConfig {
    private List<String> name;

    // 也可以使用数组来接收
//    private String[] name; 
}

访问集合的实现如下:

@RestController
public class ReadYml2 {
    @Autowired
    private ListConfig listConfig;
    @RequestMapping("/readList")
    public String readList(){
        return listConfig.toString();
    }
}

11、配置Map

此处以yml格式举例

要使⽤注解 @ConfigurationProperties 来读取,注解括号内属性填写key中的“老大”

maptypes:
  map:
  k1: kk1
  k2: kk2
  k3: kk3

或者使用行内写法(与上面的写法作用一致):

maptypes: {map: {k1: kk1,k2: kk2, k3: kk3}}

 实体类如下:

@Component
@ConfigurationProperties("maptypes")
@Data
public class MapConfig {
    private HashMap<String,String> map;
}

访问Map的实现如下:

@RestController
public class ReadYml2 {
    @Autowired
    private MapConfig mapConfig;
    @RequestMapping("/readMap")
    public String readStudent(){
        return mapConfig.toString();
    }
}

12、yml 优缺点

优点:

  • 可读性⾼,写法简单, 易于理解
  • ⽀持更多的数据类型, 可以简单表达对象, 数组, List,Map等数据形态.
  • ⽀持更多的编程语⾔, 不⽌是Java中可以使⽤, 在Golang, Python, Ruby, JavaScript中也可以使⽤

缺点:

  • 不适合写复杂的配置⽂件
  • 对格式有较强的要求(⼀个空格可能会引起⼀场⾎案)

不适合写复杂的配置⽂件如图:

🧸欢迎您于百忙之中阅读这篇博客,📜希望这篇博客给您带来了一些帮助,祝您生活愉快!

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

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

相关文章

全息舞台与传统的舞台效果相比,有哪些独特的视觉特点?

多媒体技术具备的艺术表达效果&#xff0c;为舞台内容表达注入了新的活力&#xff0c;它就像一扇“任意门”&#xff0c;为观众打开了全新的视觉体验世界&#xff0c;其中全息舞台就是一种特别出色的技术类型&#xff0c;它能将虚拟和现实相结合&#xff0c;为观众带来了全新的…

应急响应练习1

目录 1. 提交攻击者的IP地址 2. 识别攻击者使用的操作系统 3. 找出攻击者资产收集所使用的平台 4. 提交攻击者目录扫描所使用的工具名称 5. 提交攻击者首次攻击成功的时间&#xff0c;格式&#xff1a;DD /MM/YY:HH:MM:SS 6. 找到攻击者写入的恶意后门文件&#xff0c;提…

ROS机器人毕业论文数量井喷-数据日期23年11月13日

背景 ROS机器人论文数量在近3年井喷发展&#xff0c;仅硕士论文知网数据库可查阅就已经达到2264篇&#xff0c;实际相关从业者远远远大于这个数值。 按日期排序&#xff0c;每页20篇&#xff0c;23年还未结束&#xff0c;检索本身也不一定完备&#xff0c;就超过200。 相关从业…

乔新亮:打造世界级领导力,管理从示弱开始

导语 | 技术管理在企业发展中发挥着重要的作用&#xff0c;有效的技术管理能够帮助团队聚焦目标&#xff0c;提升团队协作效率&#xff0c;保障项目快速且高质量完成&#xff0c;实现业务价值。那么在当前数字化时代&#xff0c;技术管理者如何提升自身领导力&#xff0c;助力企…

Linux Centos 根目录扩展分区(保级教程)

Centos 根目录扩展分区 1、扩展背景2.列出磁盘信息3. 对磁盘进行分区4. 重启Linux5. 将PV加入卷组centos并分区6.查看分区结果 1、扩展背景 虚拟机初始分配20G内存&#xff0c;扩容到80G。 2.列出磁盘信息 可以得知容量信息以及即将创建的PV路径&#xff08;通常为“/dev/s…

MySQL查询原理与优化

文章目录 前言执行查询的过程逻辑连接器查询缓存解析器优化器执行器 衡量查询开销的三个指标响应时间扫描行数返回的行数 重构查询的几种选择一个复杂的查询还是多个简单的查询切分查询关联查询解决关联查询的原则 总结 前言 上一篇文章中&#xff08;MySQL索引全解&#xff1…

如何使用python实现邮件全家桶式功能

今天带大家实现一下&#xff0c;不登录邮箱界面 通过python代码实现发送邮件、添加附件、接收邮件的功能。 如下&#xff1a;使用网易126邮箱进行演示。 还可以添加小姐姐的可可爱爱的照片作为附件 ​ 先上效果 一、邮箱端设置 首先&#xff0c;要对邮件进行一下设置&…

【LeetCode:307. 区域和检索 - 数组可修改 | 树状数组 or 线段树】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

设计必备:2023年最值得关注的8个素材网站!

如果你想学好平面设计&#xff0c;模仿和积累材料很重要&#xff0c;今天我们将与您分享一些常见的设计网站和材料下载网站。 1、即时设计 即时设计是专业的 UI 设计在线工具&#xff0c;内置丰富的设计素材&#xff0c;它可以被看作是一个设计素材网站。即时设计拥有来自于 …

SAP ABAP列表格式及表格输出

REPORT YTEST001. DATA wa LIKE spfli. WRITE: /. WRITE: 10航班承运人,40航班连接,60国家代码,80起飞城市,100起飞机场. SELECT * INTO wa FROM spfli.WRITE: / wa-carrid UNDER 航班承运人,wa-connid UNDER 航班连接,wa-countryfr UNDER 国家代码,wa-cityfrom UNDER 起飞城市…

“颠覆·挑战·极致”华瑞指数云ExponTech WDS新一代产品重新定义企业存储和数据架构

数字经济发展&#xff0c;离不开数据这一信息时代的“新能源”。当数据爆发式增长&#xff0c;企业何处寻得一款在性能和成本上皆具备良好表现的“储能仓”&#xff1f;国内数据存储领域领先厂商华瑞指数云ExponTech自主研发的高性能、高可靠的分布式存储产品ExponTech WDS成为…

Spring中Bean实例化方式和Bean生命周期

Spring Bean的实例化方式通过构造方法实例化通过简单工厂模式实例化通过工厂方法模式实例化通过FactoryBean接口实例化 注入自定义DateBean的生命周期Bean的循环依赖问题 Bean的实例化方式 Spring为Bean提供了多种实例化方式&#xff0c;通常包括4种方式。&#xff08;也就是说…

阿里全系产品崩上了热搜,我是有些失望的

双十一刚刚过&#xff0c;没想到阿里巴巴全系产品却又崩上热搜了。看来阿里的不少程序员同学今天又是在加班中度过了&#xff0c;心疼&#xff0c;希望你们把班加了就可以了&#xff0c;锅就别背了。 据了解&#xff0c;截至目前&#xff0c;本次修复进展如下&#xff1a; 17:…

SCADA系统在化工行业应用解决方案和注意事项

SCADA系统在化工行业的数字化工厂中具有广泛的应用解决方案。SCADA系统通过实时监控和远程控制&#xff0c;帮助化工企业实现生产过程的自动化和数字化管理。以下是化工行业的SCADA系统行业应用中可以解决的客户痛点以及相关的详细设计说明&#xff1a; 远程监测和控制&#xf…

GPON、XG(S)-PON基础

前言 本文主要介绍了GPON、XG(S)-PON中数据复用技术、协议、关键技术、组网保护等内容&#xff0c;希望对你有帮助。 一&#xff1a;GPON数据复用技术 下行波长&#xff1a;1490nm&#xff0c;上行波长&#xff1a;1310nm 1&#xff1a;单线双向传输&#xff08;WDM技术&am…

JS+ES6新增字符串方法大汇总,爆肝,共四十七种方法(求个赞,哈哈)

让我为大家介绍一下字符串的操作方法吧&#xff0c;你知道与不知道的大部分都在这&#xff01; 分类可能有点不太对&#xff0c;还请大家见谅&#xff01; 增 1.concat() 拼接字符串 可以连接两个或多个字符串 let str "hello"let str1 " str"console…

项目管理工具:提高团队协作效率,确保项目按时完成

项目管理对于企业的成功至关重要&#xff0c;一个好的项目管理工具可以提高团队协作效率&#xff0c;确保项目按时完成&#xff0c;并保持项目进度的高效跟踪。 近年来&#xff0c;一款名为“进度猫”的项目管理工具逐渐崭露头角&#xff0c;它以其独特的功能和优势&#xff…

算法细节类错误

1.使用全局变量时&#xff0c;若有多组测试数据 应该注意在循坏中重新初始化全局变量 例如&#xff1a;

【第2章 Node.js基础】2.4 Node.js 全局对象(一)

什么是Node.js 全局对象 对于浏览器引擎来说&#xff0c;JavaScript 脚本中的 window 是全局对象&#xff0c;而Node.js程序中的全局对象是 global&#xff0c;所有全局变量(除global本身外)都是global 对象的属性。全局变量和全局对象是所有模块都可以调用的。Node.is 的全局…

记忆科技携手中国电信,一站式存储打造坚实数字底座

11月10日&#xff0c;以“数字科技 焕新启航”为主题的2023数字科技生态大会在广州盛大开幕&#xff0c;本次大会由中国电信、广东省人民政府联合举办&#xff0c;是一场数字科技领域的年度盛会。忆联母公司记忆科技作为中国电信的合作伙伴之一受邀参会&#xff0c;深度参与了大…