当前位置: 首页 > news >正文

《JavaEE进阶》----13.<Spring Boot【配置文件】>

本篇博客讲解

1.SpringBoot配置文件的格式以及对应的语法

2.了解两个配置文件格式的差异、优缺点。

我们这里只做简单的介绍。看会,了解,学会读取就行了。

因为配置文件实在太多了,这里只做基础的介绍。

一、配置文件的作用

前言

计算机中有许许多多的配置文件。许许多多的软件也离不开配置文件。

计算机上:如

C:\Users,C:\Windows文件夹,以及各种*.config, *.xml 文件。都是配置文件。

作用

1.配置文件主要是解决编码带来的问题,把可能会发生改变的信息,放在一个集中的地方,当们启动某个程序时,应用程序从配置文件中读取数据,并加载运行。

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

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

配置文件应用示例:

比如手机字体大小

如果采用硬编码的方式直接指定字体大小。那么所有用户使用的都是同一个字体大小。

但是不同用户有不同的偏好。我们可以把手机字体的大小放在配置文件中,当程序启动时,读取配置,以用户设置的字体大小来显示。


二、Spring Boot配置文件

Spring Boot的三种配置文件

1.application.properties

2.application.yml

3.application.yaml

  • 2和3是一样的。yml是yaml的简写。因此实际上可以认为有两个。实际开发中yml出现频率最高。当应用程序启动时,SpringBoot会自动从classpath路径找到并加载配置文件。
  • .properties类型的配置文件较老老
  • .yml类型的配置文件是较新的
  • 同一个配置项在两个配置文件都存在。那么properties的优先。
  • 不同配置项在properties和yml中配置都会生效。

整体配置项取两个配置文件的并集。

SpringBoot配置文件的常用功能

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

在之前我们写的项目中就用到了端口号的定义和数据库的连接信息。

Spring Boot在创建项目时就已经帮我们创建了配置文件。

application.properties//文件

三、properties类型配置文件 

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

3.1基本语法

properties是以键值的形式配置的,key和value之间是以等号“=”连接的

例如:

配置项目端口号

#配置项目端口号
server.port=1208

配置数据库连接信息

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

ps:配置文件中用 # 来添加注释信息

3.2读取配置文件

如果在项目中,想要主动的读取配置文件中的内容,可以使用

@Value来实现。@Value注解使用“${ }”的格式读取。

若只加了" "那么会读取" "中的作为内容来返回。

示例:

properties配置如下:

mykey.kuy1 = qyy

 编辑java代码来读取配置文件

@Value读取

@RestController
public class PropertiesController {@Value("${mykey.key1}")private String key1;@RequestMapping("/key")public String key(){return "读取到值:"+key1;}
}

运行结果: 

3.3properties缺点分析

properties配置⽂件中会有很多的冗余的信息,

如这些:

而yml类型的配置文件就没有这些。

四、yml类型配置文件

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

4.1yml基本语法

yml 是树形结构的配置文件,它的基础语法是"key: value".

注:

:后面一定要有空格。空格不可省略。

示例:

使用tml配置端口号

server:port: 1208

使用yml连接数据库

spring:datasource:url: jdbc:mysql://127.0.0.0:3306/qyy_database?characterEncoding=utf8&useSSL=falseusername: rootpassword: 12345678

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

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

使用字符串如何表示null呢?

什么都不加就行了。或者加" " / ' '代表空字符串。  

4.3yml配置字符串读取

与properties类似。

yml配置如下:

@Value注解读取

string:hello: qyy
@RestController
public class PropertiesController {@Value("${string.hello}")private String key1;@RequestMapping("/key")public String key(){return "读取到值:"+key1;}
}

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

字符串默认不用加单引号或者双引号,如果加英文的单引号可以表示特殊的含义。

如在application.yml配置如下信息。

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

读取程序实现代码如下:

    @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";}

运行结果:

Hello \n Spring Boot.
Hello \n Spring Boot.
Hello Spring Boot.

结果发现

  • 字符串默认不用加单引号或双引号
  • 单引号中,和不加引号中的转义字符不会生效
  • 双引号中的转义字符会生效

4.4yml配置对象

我们还可以在yml中配置对象

配置示例如下:有两种写法。

一种是换行分开写,还有一种是行内写法(他们写法作用一致)

student1:id: 1name: javaage: 17student2: {id: 1,name: java,age: 18}

如何读取配置中的对象呢?

此时要使用别的注解

@ConfigurationProperties+@Component注解读取

注意还要配合

用这个注解来读取对象。

@ConfigurationProperties(prefix = "student1")
@Component
@Data
public class StudentInfo {private int id;private String name;private int age;}

打印对象

    /*** yml配置读取对象*/@Autowiredprivate StudentInfo student;@RequestMapping("/student")public String readStudent(){System.out.println(student.toString());return student.toString();}

 运行结果:

StudentInfo(id=1, name=java, age=17)

4.5yml配置集合

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

#配置集合
dbtypes:name:- mysql- sqlserver- db2

- 后面的空格不可省略,虽然不会报错,但是含义变了。如果空格省略这几个元素会当做一个元素来处理。

集合的读取和对象一样,也是用这个注解

@ConfigurationProperties+@Component注解读取

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

运行结果:

4.6yml配置Map

配置文件也可以配置map,配置代码如下:

可以换行写,也可以使用行内写法

maptype1:map:k1: kk1k2: kk2k3: kk3maptype2: {map: {k1: kk1,k2: kk2,k3: kk3}}

读取代码如下:

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

打印代码如下:

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

运行结果:

4.7yml的优缺点

优点:

1.可读性高,写法简单,易于理解

2.支持更多的数据类型,可以简单表达对象、数组、List、Map等数据类型

3.支持更多的编程语言,不止是java中可以使用,在Golang、python、Ruby、JavaScript中也可以使用

缺点:

1.不适合写复杂的配置文件

如:properties格式配置如下:

转换为yml

keycloak:realm: demoresource: fm-cache-cloudcredentials:secret: d4589683-Oce7-4982-bcd3security:- authRoles:- usercollections:- name: ssologinurlpatterns:- /login/*

转换过程比较花费精力,如果配置更复杂一点,可读性会更差,代码也会更难写

2. 对格式有较强的要求(⼀个空格可能会引起一场血案)

五、综合性练习

下篇预告:

验证码案例:我们会在下一篇博客中单独讲解验证码案例哦。

相关文章:

《JavaEE进阶》----13.<Spring Boot【配置文件】>

本篇博客讲解 1.SpringBoot配置文件的格式以及对应的语法 2.了解两个配置文件格式的差异、优缺点。 我们这里只做简单的介绍。看会&#xff0c;了解&#xff0c;学会读取就行了。 因为配置文件实在太多了&#xff0c;这里只做基础的介绍。 一、配置文件的作用 前言 计算机中有许…...

【练习8】

链接&#xff1a;https://www.nowcoder.com/questionTerminal/e671c6a913d448318a49be87850adbcc 分析&#xff1a; 创建一个二维数组来实现杨辉三角&#xff0c;因为当前元素的值是上一行的当前列与前一列的和&#xff0c;所以创建数组的时候要实现n1&#xff0c;相当于罩子一…...

vivado 时间汇总报告

步骤7&#xff1a;时间汇总报告 定时路径在时钟元素处开始和结束。输入和输出端口不是顺序的 元素&#xff0c;默认情况下&#xff0c;Vivado时序分析不会对进出I/O端口的路径进行计时 设计&#xff0c;除非指定了输入/输出延迟约束。 在此步骤中&#xff0c;您将在Vivado中生成…...

【软考】设计模式之代理模式

目录 1. 说明2. 应用场景3. 结构图4. 构成5. 适用性6. 优点7. 缺点8. java示例 1. 说明 1.代理模式&#xff08;Proxy Pattern&#xff09;。2.意图&#xff1a;为其他对象提供一种代理以控制对这个对象的访问。3.通过提供与对象相同的接口来控制对这个对象的访问。4.是设计模…...

3.创建型设计模式详解:生成器模式与原型模式的深度解析

设计模式&#xff08;Design Patterns&#xff09;是软件开发中常用的解决方案&#xff0c;帮助开发者处理常见的设计问题。创建型设计模式专注于对象的实例化&#xff0c;旨在提高系统的灵活性和可维护性。在这篇文章中&#xff0c;我们将深入探讨创建型设计模式中的生成器模式…...

goframe结构体标签和命令行标签

元数据gmeta 基础标签 更多了解&#xff1a;https://swagger.io/specification/ g.Meta path:"/profile" method:"get" summary:"展示个人资料页面" tags:"个人" g.Meta mime:"text/html" type:"string" example…...

pytest压力测试:不断发送数据,直到发现数据丢失

示例场景 假设有一个 send_data 函数接受数据并返回成功或失败的状态。 创建一个测试用例&#xff0c;通过逐步增加数据量来测试这个函数&#xff0c;直到返回失败为止。 步骤 定义压力测试函数 定义一个函数。不断发送数据&#xff0c;直到发现数据丢失。 创建 pytest 测试…...

自选择问题和处理效应模型

自选择问题和处理效应模型 DGP 注意&#xff1a; 这里的概率密度超过了1&#xff0c;这是正常的。概率密度的三原则&#xff0c;1是大于等于0&#xff1b;2是积分等于1&#xff1b;对于连续型随机变量&#xff0c;给定一个具体的x值&#xff0c;f(x)并不是该事件发生的概率。而…...

[数据集][目标检测]水面垃圾检测数据集VOC+YOLO格式2027张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;2027 标注数量(xml文件个数)&#xff1a;2027 标注数量(txt文件个数)&#xff1a;2027 标注…...

OpenCV 之 模版匹配多个对象、图片旋转 综合应用

引言 在图像处理和计算机视觉中&#xff0c;模板匹配是一种常用的技术&#xff0c;用于在一幅较大的图像中查找与给定模板图像相似的部分。然而&#xff0c;在实际应用中&#xff0c;目标物体可能会出现在不同的角度&#xff0c;这就需要我们在匹配之前对模板进行旋转处理。本…...

ZooKeeper 中的 Curator 框架解析

Apache ZooKeeper 是一个为分布式应用提供一致性服务的软件。它提供了诸如配置管理、分布式同步、组服务等功能。在使用 ZooKeeper 时&#xff0c;Curator 是一个非常流行的客户端库&#xff0c;它简化了 ZooKeeper 的使用&#xff0c;提供了高级的抽象和丰富的工具。本文将详细…...

机械学习—零基础学习日志(Python做数据分析02)

现在开始使用Python尝试做数据分析。具体参考的网址链接放在了文章末尾。 引言 我通过学习《利用Python进行数据分析》这本书来尝试使用Python做数据分析。书里让下载&#xff0c;anaconda&#xff0c;使用Jupyter来写代码&#xff0c;只是下载一个anaconda的确有点费时间&am…...

BRAM IP Native模式使用

简介 BRAM&#xff08;‌Block RAM&#xff09;是‌FPGA&#xff08;Field-Programmable Gate Array&#xff09;中的一种专用RAM资源&#xff0c;固定分布在FPGA内部的特定位置。该内容主要对BRAM&#xff08;Block RAM”的缩写&#xff09;Native模式下IP界面做详细描述和使用…...

react的useRef用什么作用

useRef 是 React 提供的一个钩子&#xff0c;用于在函数组件中创建和管理对 DOM 元素或组件实例的引用。它返回一个包含 current 属性的对象&#xff0c;可以用来存储对某个值的引用&#xff0c;而这个引用在组件的整个生命周期内保持不变。 useRef 的主要用途 1.访问 DOM 元素…...

10.2 TCP IP模型、IP协议、IPv4、子网掩码

TCP / IP 协议族 IP协议 IPv4地址 IPv4地址分类 子网掩码 子网掩码用来区分 网络地址 和 主机地址 真题 1...

工业相机飞拍的原理及工作原理

工业相机飞拍&#xff08;或称为工业高速相机飞行拍摄&#xff09;是一种利用高速图像捕捉技术和精密运动控制系统进行高效图像采集的先进技术。它广泛应用于工业检测、质量控制和自动化生产等领域。本文将详细探讨工业相机飞拍的原理及其工作方式。 一、工业相机飞拍的基本概…...

通过AI来创建一个_____html css网页制作成品 例子演示

使用AI 输入创建一个 html css网页制作成品 例 然后出来 好的&#xff0c;我将为您创建一个简单的HTML和CSS网页制作的示例。这个示例将包括基本的布局、文本样式和一些内联的CSS样式。 { "name": "dalle", "description": "A simple exa…...

C ++ 从单链表到创建二叉树到二叉树的遍历(结构体)

首先我们要了解二叉树的数据结构是什么&#xff0c;本质上二叉树是一个有两个节点的链表&#xff0c;我们先了解的单链表的相关定义 单链表 创建一个朴素的单链表 #include <iostream>using namespace std;struct Node{int val;Node* next;Node(int x) : val(x), next(…...

Python 编程:如何巧妙运用 `abc` 模块解锁面向对象设计的新维度?

引言 在软件开发的世界里&#xff0c;面向对象编程&#xff08;OOP&#xff09;作为一门艺术&#xff0c;其精髓在于通过封装、继承与多态来构建可维护性高、易于扩展的系统。而在 Python 这门语言中&#xff0c;abc 模块则为我们提供了一种优雅的方式来定义抽象基类&#xff…...

Jenkins 执行 shell 时报错 Host key verification failed.

1. 问题描述 在 jenkins 中执行下面的 shell 语句时 sshpass -p "123456" scp -r * dep192.168.1.100:/home/dep/Desktop/报错 Host key verification failed.可能原因是由于首次登录时需要输入 yes 导致无法连接成功。 The authenticity of host 192.168.1.100…...

MyBatis-Plus&Druid数据源

MyBatis-Plus&#xff08;简称MP&#xff09;和Druid数据源在Java开发中各自扮演着重要的角色&#xff0c;它们分别增强了MyBatis的数据库操作能力和提供了高效的数据库连接池管理。以下是对MyBatis-Plus和Druid数据源的总结&#xff1a; MyBatis-Plus 定义与特性&#xff1a…...

MTPA控制分析与推导

目录 MTPA (Maximum torque per ampere) 一. 控制目的 二. 设计思路 三. 推导过程 MTPA (Maximum torque per ampere) 一. 控制目的 忽略电机中的铁耗只考虑铜耗的背景下&#xff0c;希望实现铜耗最小化。 二. 设计思路 通过给出电机在d-q坐标系下的等效电路模型&…...

Spring Boot 的Web项目如何直接显示html

前言 实际的开发中,在Spring Boot的Web项目中直接使用html文件的场景已经比较少了, 或者是只需要很简单的页面显示,或者是演示的需要, 大部分的状况都是Spring Boot作为后端提供REST 的服务,结合其他的一些前端Framework进行开发,比如VUE,Ext JS等。 Spring Boot项目中…...

【回收站选址】

题目 代码 #include <bits/stdc.h> using namespace std; const int R 2e91; typedef long long LL; unordered_set<LL> s; int piles[5]; int dx[4] {-1, 0, 1, 0}, dy[4] {0, 1, 0, -1}; int dx1[4] {-1, -1, 1, 1}, dy1[4] {-1, 1, -1, 1};bool check(LL …...

Springboot整合websocket(附详细案例代码)

文章目录 WebSocket简述WebSocket是什么&#xff1f;WebSocket 的特点WebSocket 的工作流程WebSocket的消息(帧)格式WebSocket 与 HTTP springboot中整合WebSocketpom依赖实体类配置类握手配置类WebSocket配置类 自定义异常类webSocket服务类websocket中Session的 getBasicRemo…...

微信小程序:navigateTo跳转无效

关于 navigateTo 跳转无效问题&#xff0c;在IOS、模拟器上面都能正常跳转&#xff0c;但是在安卓上面不能跳转&#xff0c;过了一段时间IOS也不能跳转了。仔细找了下问题结果是要跳转的页面是tab&#xff0c;不能使用navigateTo 取跳转修改为&#xff1a; wx.switchTab({url:…...

C++ 设计模式——解释器模式

目录 C 设计模式——解释器模式1. 主要组成成分2. 逐步构建解释器模式步骤1: 定义抽象表达式步骤2: 实现终结符表达式步骤3: 实现非终结符表达式步骤4: 构建语法树步骤5: 实现内存管理步骤6: 创建上下文和客户端 3. 解释器模式 UML 图UML 图解析 4. 解释器模式的优点5. 解释器模…...

【开源大模型生态6】生态大咖与产品布局

上图是基础设施、大模型、行业应用构成大模型开源生态体系。 这里一一给大家介绍以下。 金融 Qwen&#xff1a;阿里云推出的一种大型语言模型&#xff0c;具有强大的对话能力和多模态理解能力。天工&#xff1a;通常指的是阿里云的一套物联网&#xff08;IoT&#xff09;解决…...

虚拟机苹果系统的QT安装体验

前言 苹果系统MacOS中除了安装XCode&#xff0c;完全可以安装QT。本质上来讲&#xff0c;苹果系统就是Linux改装版本&#xff0c;实际上和Ubuntu非常的接近。 1、Mac对应的QT安装包的下载 安装参考链接&#xff1a;MacOS下Qt 5开发环境安装与配置_macos qt-CSDN博客 苹果系统…...

多路转接之poll(接口介绍,struct pollfd介绍,实现原理,实现非阻塞网络通信代码)

目录 poll 引入 介绍 函数原型 fds struct pollfd 特点 nfds timeout 取值 返回值 原理 如何实现关注多个fd? 如何确定哪个fd上有事件就绪? 如何区分事件类型? 判断某事件是否就绪的方法 代码 示例 总结 为什么说它解决了fd上限问题? 缺点 poll 引入…...