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

🧸欢迎来到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中也可以使⽤

缺点:

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

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Windows电脑训练 RT-DETR 改进算法 (Ultralytics) 教程,改进RTDETR算法(包括使用训练、验证、推理教程)

手把手从零开始训练 RT-DETR 改进项目 (Ultralytics版本) 教程,改进RTDETR算法 本文以Windows服务器为例:从零开始使用Windows训练 RT-DETR 算法项目 《芒果剑指 RT-DETR 目标检测算法 改进》 适用于芒果专栏改进RT-DETR算法 文章目录 百度 RT-DETR 算法介绍改进网络代码汇…

MySQL:语法速查手册【更新中...】

一、定义基本表 1、常用的完整性约束 主码约束 primary key外键约束 foreign key唯一性约束 unique非空性约束 not null取值约束 check2、例题 【例1】建立一个“学生”表Student&#xff0c;由学号Sno、姓名Sname、性别Ssex、年龄Sage、所在系Sdept五个属性组成。其中…

8个月过去了,中国大模型落地进展如何?

就目前来看&#xff0c;大模型落地金融、能源行业先行&#xff0c;智能客服等生成类应用大于决策类应用&#xff0c;落地价值不及预期。然而随着行业定制化、模型轻量级化和数据安全化等技术的发展&#xff0c;AI大模型的落地应用将迎来更加广阔的发展空间。 作者|斗斗 编辑…

CPS:实现销售和广告的完美结合

随着互联网的快速发展&#xff0c;电商行业呈现出爆炸性的增长。在这个充满竞争的市场中&#xff0c;如何有效地吸引和引导消费者购买产品&#xff0c;成为电商企业成功的关键。而CPS&#xff08;Cost Per Sales&#xff09;作为一种创新的广告模式&#xff0c;正逐渐成为电商行…

关于pip basicsr,facexlib,realesrgan et al.安装报错。

首先basicsr是一个超分的库&#xff0c;在ubuntu系统上pip时会报错。 上图这种错误&#xff0c;或者其他的错误&#xff0c;有的方法让去github上安装&#xff0c;那种方法到setup.py的时候也会报错。 问题在于首先 -i的源要换成阿里的源&#xff0c;然后要安装他要求的库&…

ds前后台博客系统

源码私信或者公众号java大师获取 博客简介&#xff1a;本博客采用Spring Boot LayUI做为基础&#xff0c;进行的博客系统开发&#xff0c;与bootvue相比&#xff0c;更为适合开发简单的系统&#xff0c;并且更容易上手&#xff0c;简单&#xff01;高效&#xff01;更易上手&a…

【Java】集合(一)单列集合List

1.集合 可以动态保存任意多个对象&#xff0c;并提供了一系列的操作对象的方法&#xff1a;add、remove、set、get等。 2.集合框架体系 分为两大类&#xff1a; 单列集合和双列集合 3.List接口基本介绍 List接口是Collection接口的子接口 List集合类中元素有序&#xff0…

使用 `open-uri.with_proxy` 方法打开网页

Ruby 爬虫程序如下&#xff1a; require open-uri require nokogiri# 定义代理信息 proxy_host jshk.com.cn# 定义要爬取的网页 URL url http://www.example.com# 使用代理信息打开网页 open-uri.with_proxy(proxy_host, proxy_port) do |proxy|# 使用 Nokogiri 库解析网页内…

mysql主从复制和读写分离

什么叫主从复制&#xff1f; 主从复制架构图和数据流向 主MySQL上的数据、新增、修改库、表、表里的数据。都会同步到从MySQL上 面试题&#xff1a;MySQL的主从复制模式 1、 异步复制&#xff1a;MySQL的默认复制就是异步复制。工作中也一般使用异步复制。只要执行完之后&am…

excel记录wFm数值(推理过程)

1 导入计算wfm库2 实例化具体的指标 3 列表循环之前&#xff0c;设置空list 4 单图评测-将图号、图片名、数值记录 列表里面存储dict 5 将excel列表结果逐个存入excel.xlsx文件 完整代码 test_CPD.py ### test_CPD.py ### import torch import torch.nn.functional as Fimpor…

Autosar模块介绍:FEE(Flash模拟EEPROM)

上一篇 | 返回主目录 | 下一篇 Autosar模块介绍&#xff1a;FEE(Flash模拟EEPROM 1 基本术语解释2 Ea组成结构图3 Ea基本操作3.1 通用操作3.2 作业的进程&#xff08;通用需求&#xff09;3.3 读操作过程3.4 写操作过程3.5 擦除过程3.6 比较过程 4 Ea常用操作时序4.1 初始化4.…

SpringBoot日志全方位超详细手把手教程,零基础可学习 日志如何配置及SLF4J的使用......

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信您对这篇博客也感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;SpringIOC和DI的代码实现&#xff0c;Spring如何存取对象&#xff1f;Controller、Service、Repository、Component、Configuration、Bean DI详…

【沐风老师】3dMax使用克隆修改器插件创建旋转楼梯教程

3DMAX克隆修改器插件&#xff0c;它通过增量平移、旋转和缩放输入几何体来创建对象的副本。在某些方面&#xff0c;它类似于 3dMax 的内置“阵列”工具&#xff0c;但有一个主要优点 -克隆修改器是完全参数化的&#xff0c;因此您可以随时更改重复项的数量及其分布。其他功能包…

LeetCode-剑指 Offer 22. 链表中倒数第k个节点(C语言 )

目录捏 一、题目描述二、示例与提示三、思路四、代码 一、题目描述 给定一个头节点为 head 的链表用于记录一系列核心肌群训练项目编号&#xff0c;请查找并返回倒数第 cnt 个训练项目编号。 二、示例与提示 示例 1&#xff1a; 输入&#xff1a; head [2,4,7,8], cnt 1 输…

北大Cobot V4.3换新登场

库博SAST V4.3焕然一新&#xff0c;重装上市。作为国内最早的研究并成功开发SAST产品的团队&#xff0c;北大软件下属与北京大学国家工程与软件工程研究中心组成的库博团队&#xff0c;从2012年就起步研发静态应用安全测试产品—Cobot。历经10余年迭代升级&#xff0c;目前已经…

JAVA数据代码示例

首先&#xff0c;我们需要导入一些必要的Java库 java import java.net.URL; import java.net.HttpURLConnection; import java.io.BufferedReader; import java.io.InputStreamReader; 然后&#xff0c;我们可以创建一个URL对象&#xff0c;表示我们要爬取的网页的URL。 jav…

Linux安装微信

Linux安装微信 环境&#xff1a;ubuntu 20.04 https://archive.ubuntukylin.com/ubuntukylin/pool/partner/weixin_2.1.4_amd64.deb sudo dpkg -i weixin_2.1.4_amd64.deb完成 参考文章

uniapp h5发行

前端使用uniapp开发项目完成后&#xff0c;需要将页面打包&#xff0c;生成H5的静态文件&#xff0c;部署在服务器上。 这样通过服务器链接地址&#xff0c;直接可以在手机上点开来访问。 打包全步骤如下&#xff1a; 首先在manifest.json文件中进行基础配置&#xff0c;获取…

银行数据中心机房动力环境监控系统设计与优化

安科瑞电气股份有限公司 上海嘉定201801 摘要&#xff1a;结合银行数据中心建设项目&#xff0c;设计银行数据中心机房动力环境监控系统&#xff0c;分析银行数据中心机房监控对象、搭建系统监控架构&#xff0c;给出监控实现方法&#xff0c;*后针对运行一段时间出现的问题&a…

优雅的Java编程:将接口对象作为方法参数

theme: smartblue 目录 概述 在Java编程中&#xff0c;方法的参数传递方式通常是通过基本类型、对象引用或者集合等方式。然而&#xff0c;一种更加优雅且灵活的设计模式是将接口对象作为方法的参数。这种方式为我们带来了许多好处&#xff0c;包括降低耦合性、实现多态性和可…