SpringBoot配置文件


大家好,我是小帅今天我来学习Web开发中的配置文件。

文章目录

  • 1. 配置⽂件作⽤
  • 2. 配置⽂件入门
  • 3. 配置⽂件的格式
  • 4. properties 配置⽂件说明
    • 4.1 properties 基本语法
    • 4.2 读取配置⽂件(@Value 注解)
    • 4.3 properties 缺点分析
  • 5. yml 配置⽂件说明
    • 5.1 yml 基本语法
    • 5.2 yml 使⽤进阶
      • 5.2.1 yml 配置不同数据类型及 null
      • 5.2.2注意事项:@value 值加单双引号
      • 5.2.3 配置对象(@ConfigurationProperties读取对象)
      • 5.2.4配置集合
      • 5.2.5 配置Map
  • 6. 总结


1. 配置⽂件作⽤

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

SpringBoot配置⽂件
SpringBoot⽀持并定义了配置⽂件的格式, 也在另⼀个层⾯达到了规范其他框架集成到SpringBoot的⽬的.
很多项⽬或者框架的配置信息也放在配置⽂件中, ⽐如:

  1. 项⽬的启动端⼝
  2. 数据库的连接信息(包含⽤⼾名和密码的设置)
  3. 第三⽅系统的调⽤密钥等信息
  4. ⽤于发现和定位问题的普通⽇志和异常⽇志等.

SpringBoot内置了Tomcat服务器, 默认端⼝号是8080, 但是⽤⼾电脑上8080端⼝号有可能就被其他应⽤程序占⽤了, 所以SpringBoot需要⽀持让⽤⼾⾃定义端⼝号。

2. 配置⽂件入门

我们在前⾯讲了Tocmat 默认端⼝号是8080, 所以我们程序访问时的端⼝号也是8080,但是如果8080端⼝号已经被其他进程使⽤了呢? 我们可以通过配置⽂件来修改服务的端⼝号。
在这里插入图片描述
使用server.prort = 9090
重新运⾏程序, 观察⽇志
在这里插入图片描述

3. 配置⽂件的格式

Spring Boot 配置⽂件有以下三种:

  1. application.properties
  2. application.yml
  3. application.yaml

yml 为yaml的简写, 实际开发中出现频率最⾼. yaml 和yml 的使⽤⽅式⼀样, 课堂中只讲yml⽂件的使⽤.

当应⽤程序启动时, Spring Boot会⾃动从classpath路径找到并加载application.properties 和 application.yaml 或者application.yml ⽂件.
在这里插入图片描述
特殊说明

  1. 理论上讲 .properties 和 .yml 可以并存在于⼀个项⽬中,当 .properties 和 .yml并存时,两个配置都会加载. 如果配置⽂件内容有冲突, 则以 .properties 为主, 也就是.properties 优先级更⾼.
  2. 虽然理论上来讲 .properties 可以和 .yml 共存,但实际的业务当中,我们通常会采取⼀种统⼀的配置⽂件格式,这样可以更好的维护(降低故障率).

4. properties 配置⽂件说明

properties 配置⽂件是最早期的配置⽂件格式,也是创建 SpringBoot 项⽬默认的配置⽂件.

4.1 properties 基本语法

roperties 是以键值的形式配置的,key 和 value 之间是以"="连接的,如:
代码:

spring.application.name=spring-IOC-DI-2024-12-14
# 配置项⽬端⼝号
server.port=8080
#配置数据库连接信息
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/db_study?
characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password="123456"

⼩技巧:配置⽂件中使⽤“#”来添加注释信息。

4.2 读取配置⽂件(@Value 注解)

如果在项⽬中,想要主动的读取配置⽂件中的内容,可以使⽤ @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;}}

这里注意一下不要把包导错了

结果可以访问到,properties文件的值
在这里插入图片描述

4.3 properties 缺点分析

从上述配置key看出,properties 配置⽂件中会有很多的冗余的信息,⽐如这些:
在这里插入图片描述

5. yml 配置⽂件说明

yml 是 YAML 是缩写,它的全称 Yet Another Markup Language 翻译成中⽂就是“另⼀种标记语⾔.我们先来学习yml的语法。

5.1 yml 基本语法

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

在这里插入图片描述
举个例子
使⽤ yml 连接数据库
在这里插入图片描述
yml 和 properties 连接数据库的配置对⽐
在这里插入图片描述

5.2 yml 使⽤进阶

5.2.1 yml 配置不同数据类型及 null

# 字符串
string.value: Hello
# 布尔值,truefalse
boolean.value: true
boolean.value1: false
# 整数
int.value: 10
# 浮点数
float.value: 3.14159
# Null~代表null
null.value: ~
# "" 空字符串
#, 直接后⾯什么都不加就可以了, 但这种⽅式不直观, 更多的表⽰是使⽤引号括起来
empty.value: ''

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

# 布尔值,true或false
boolean:value: truevalue1: false
# 整数
int:value: 10

测试代码:

@RestController
public class ReadYml {@Value("${int.value}")private int value;@RequestMapping("/ymlKey")public String key() {return "读取到值:" + value;}}

访问结果:
在这里插入图片描述

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

字符串默认不⽤加上单引号或者双引号,如果加英⽂的单双引号可以表⽰特殊的含义。

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

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

输出结果:
在这里插入图片描述
从上述结果可以看出:

  1. 字符串默认不⽤加上单引号或者双引号。
  2. 单引号会转义特殊字符,使其失去特殊功能, 始终是⼀个普通的字符串.
  3. 双引号不会转义字符串⾥⾯的特殊字符, 特殊字符会表⽰本⾝的含义.

5.2.3 配置对象(@ConfigurationProperties读取对象)

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

#配置对象
student:id: 1name: zahngsanage: 18

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

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

这个时候就不能⽤ @Value 来读取配置中的对象了,此时要使⽤另⼀个注解

@ConfigurationProperties 来读取yml的对象
@ConfigurationProperties 来读取,具体实现如下:

@ConfigurationProperties("student")//类似于属性注入
@Component
@Data
public class Student {private int id;private String name;private int age;
}

调⽤类的实现如下:

@RestController
public class StudentController {@Autowiredprivate Student student;@RequestMapping("/readStudent")public String readStudent() {return student.toString();}
}

使用浏览器访问:
在这里插入图片描述

5.2.4配置集合

dbtypes:name:- mysql- sqlserver- db2#注意这里-后面要有空格

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

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

访问集合的实现如下:

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

输出结果:
在这里插入图片描述

5.2.5 配置Map

yml配置map代码:

#配置map
maptypes:map:k1: kk1k2: kk2k3: kk3

Map的读取和对象⼀样,也是使⽤ @ConfigurationProperties 来读取的,具体实现如下:

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

打印类的实现如下:

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

输出结果:
在这里插入图片描述

yml优缺点
优点:

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

缺点:

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

6. 总结

  1. properties 是以 key=value 的形式配置的键值类型的配置⽂件, yml 使⽤的是树形配置⽅式.
  2. 读取配置⽂件内容, 使⽤ @Value 注解, 注解内使⽤" ${} "的格式读取.
  3. yml 层级之间使⽤换⾏缩进的⽅式配置, key 和 value 之间使⽤": "(英⽂冒号)加空格的⽅式设置, 并
    且空格不可省略.
  4. properties 为早期并且默认的配置⽂件格式, 其配置存在⼀定的冗余数据, 使⽤ yml 可以很好的解决
    数据冗余的问题, 但不适合复杂配置.
  5. yml 可以和 properties 共存,但⼀个项⽬中建议使⽤⼀种配置类型⽂件
  6. properties 优先级高于yml

好了今天就到这里,感谢观看。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FPGA的 基本结构(Xilinx 公司Virtex-II 系列FPGA )

以Xilinx 公司Virtex-II 系列FPGA 为例&#xff0c;其基本结构由下图所示。它是主要由两大部分组成&#xff1a;可编程输入/输出&#xff08;Programmable I/Os&#xff09;部分和内部可配置&#xff08;Configurable Logic&#xff09;部分。 可编程输入/输出&#xff08;I/Os…

day10_Structured Steaming

文章目录 Structured Steaming一、结构化流介绍&#xff08;了解&#xff09;1、有界和无界数据2、基本介绍3、使用三大步骤(掌握)4.回顾sparkSQL的词频统计案例 二、结构化流的编程模型&#xff08;掌握&#xff09;1、数据结构2、读取数据源2.1 File Source2.2 Socket Source…

mybatisPlus(条件构造器API)

文章目录 目录一、mybatisPlus的介绍二、mybatisPlus的基础使用配置BaseMapper的基本CURD&#xff08;增删改查&#xff09; 三、wrapper&#xff08;条件构造器&#xff09;条件构造器&#xff08;wrapper&#xff09;通用API基础条件判断&#xff1a;进阶条件判断&#xff08…

手撕代码: C++实现按位序列化和反序列化

目录 1.需求 2.流程分析 3.实现过程 4.总结 1.需求 在我们正在开发的项目&#xff0c;有这样一种需求&#xff0c;实现固定格式和自由格式的比特流无线传输。解释一下&#xff0c;固定格式形如下面表格&#xff1a; 每个字段都有位宽、类型等属性&#xff0c;这种固定格式一…

【Rust自学】12.6. 使用TDD(测试驱动开发)开发库功能

12.6.0. 写在正文之前 第12章要做一个实例的项目——一个命令行程序。这个程序是一个grep(Global Regular Expression Print)&#xff0c;是一个全局正则搜索和输出的工具。它的功能是在指定的文件中搜索出指定的文字。 这个项目分为这么几步&#xff1a; 接收命令行参数读取…

C#,入门教程(27)——应用程序(Application)的基础知识

上一篇&#xff1a; C#&#xff0c;入门教程(26)——数据的基本概念与使用方法https://blog.csdn.net/beijinghorn/article/details/124952589 一、什么是应用程序 Application&#xff1f; 应用程序是编程的结果。一般把代码经过编译&#xff08;等&#xff09;过程&#…

机器学习(1):线性回归概念

1 线性回归基础 1.1 什么是线性 例如&#xff1a;汽车每小时60KM&#xff0c;3小时可以行使多长距离&#xff1f;已知汽车的速度&#xff0c;则汽车的行使距离只与时间唯一相关。在二元的直角坐标系中&#xff0c;描出这一关系的图是一条直线&#xff0c;所以称为线性关系。 线…

日志系统实践

日志系统 产生日志 logging:level:root: infoconfig: /usr/src/config/logback-spring.xml<?xml version"1.0" encoding"UTF-8"?> <configuration><appender name"STDOUT" class"ch.qos.logback.core.ConsoleAppender&qu…

基于微信小程序的智能停车场管理系统设计与实现(LW+源码+讲解)

专注于大学生项目实战开发,讲解,毕业答疑辅导&#xff0c;欢迎高校老师/同行前辈交流合作✌。 技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;…

如何选择Ubuntu版本

一、为什么要选择Ubuntu系统&#xff1f; CentOS官方已全面停止维护CentOS Linux项目 。具体来说&#xff0c;CentOS 8已于2021年12月31日停止维护&#xff0c;而CentOS 7则在2024年6月30日结束了生命周期 。这意味着这些版本不再接收官方的安全更新、bug修复或技术支持 二、…

Elasticsearch ES|QL 地理空间索引加入纽约犯罪地图

可以根据地理空间数据连接两个索引。在本教程中&#xff0c;我将向你展示如何通过混合邻里多边形和 GPS 犯罪事件坐标来创建纽约市的犯罪地图。 安装 如果你还没有安装好自己的 Elasticsearch 及 Kibana 的话&#xff0c;请参考如下的链接来进行安装。 如何在 Linux&#xff0…

分布式缓存redis

分布式缓存redis 1 redis单机&#xff08;单节点&#xff09;部署缺点 &#xff08;1&#xff09;数据丢失问题&#xff1a;redis是内存存储&#xff0c;服务重启可能会丢失数据 &#xff08;2&#xff09;并发能力问题&#xff1a;redis单节点&#xff08;单机&#xff09;部…

【ArcGIS初学】产生随机点计算混淆矩阵

混淆矩阵&#xff1a;用于比较分类结果和地表真实信息 总体精度(overall accuracy) :指对角线上所有样本的像元数(正确分类的像元数)除以所有像元数。 生产者精度(producers accuracy) &#xff1a;某类中正确分类的像元数除以参考数据中该类的像元数(列方向)&#xff0c;又称…

C++ STL之容器介绍(vector、list、set、map)

1 STL基本概念 C有两大思想&#xff0c;面向对象和泛型编程。泛型编程指编写代码时不必指定具体的数据类型&#xff0c;而是使用模板来代替实际类型&#xff0c;这样编写的函数或类可以在之后应用于各种数据类型。而STL就是C泛型编程的一个杰出例子。STL&#xff08;Standard …

GitLab本地服务器配置ssh和克隆项目

1. 本地安装好git git链接&#xff1a;https://git-scm.com/downloads/win 无脑点击下一步安装即可,打开Git Bash命令终端如下&#xff1a; 2. 配置本地用户名和邮箱 git config --global user.name "你的名字" git config --global user.email "你的邮箱&quo…

【Unity高级】一文了解Unity 中的条件编译(附所有指令)

一、Unity中的条件编译 Unity 对 C# 语言的支持包括使用指令&#xff0c;这些指令允许您根据是否定义了某些脚本符号&#xff0c;选择性地包含或排除代码的编译。有关这些指令在 C# 中如何工作的更多信息&#xff0c;请参阅微软关于 C# 预处理器指令 的文档。 &#xff08;一…

主数据系统建设模式分析

很多企业在长期的信息化建设和使用过程中&#xff0c;或多或少的存在数据一致性问题&#xff0c;这类问题导致了大量的数据手工梳理、清洗的工作&#xff0c;对于系统的对接以及统计分析造成了极大的不便&#xff0c;因此信息化部门的管理者迫切的想通过主数据项目来解决目前的…

Redis是单线程还是多线程?

大家好&#xff0c;我是锋哥。今天分享关于【Redis是单线程还是多线程&#xff1f;】面试题。希望对大家有帮助&#xff1b; Redis是单线程还是多线程&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Redis是 单线程 的。 尽管Redis的处理是单线程的&a…

UML系列之Rational Rose笔记一:用例图

好久没有更新笔记了&#xff1b;最近想整理下近期掌握的UML软件建模的知识笔记&#xff1b; 包括但不限于Rational Rose&#xff1b;Drawio&#xff1b;EA&#xff1b;PowerDesigner&#xff1b;Visio&#xff1b;StarUML&#xff1b;Software等软件的使用&#xff1b;UML软件…

熵权法(变异系数法)

熵权法(变异系数法) 一种客观赋权方法&#xff0c;它根据指标的变异程度来确定指标的权重&#xff0c;变异程度越大&#xff0c;说明该指标所包含的信息量越大&#xff0c;相应的权重也就越大。以下是熵权法的详细介绍&#xff1a; 概率与信息量的关系 概率P(x)越小,信息量I(…