七、深入了解SpringBoot的配置文件

一、配置端口号

通过配置文件application.properties配置修改端口号

修改 application.properties 文件

#端口号修改成 9090
server.port=9090

运行结果,观察日志

二、配置文件格式

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

• application.properties

• application.yml

• application.yaml

其中yml为yaml的简写,实际开发中出现频率最高

应⽤程序启动时,SpringBoot会⾃动从classpath路径找到并加载 application.properties 和 application.yaml 或者 application.yml ⽂件.

说明:

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

三、properties配置文件说明

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

3.1 properties 基本语法

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

#端口号修改成 9090
server.port=9090
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8&useSSL=false
spring.datasource.username=root
pring.datasource.password=123456

3.2 读取配置⽂件

如果在项目中,想要主动的读取配置文件中的内容,可以使用@Value注解来实现
@Value注解使用”${}“的格式读取,如下代码所示:

application.properties的文件配置:

book.key1=key1

在postman中运行结果: 

 3.3 properties 缺点分析

properties 配置是以key-value的形式配置的,properties配置文件中会有很多的冗余的信息 如下图:

 四、yml配置文件的说明

4.1 yml基本语法

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

key和value之间使⽤英文冒号加空格的⽅式组成,空格不可省略

使用yml连接数据库 

yml使用示例:

#端口号
server:port: 9092#连接数据库
spring:datasource:url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTCusername: rootpassword: 123456

yml和properties连接数据库的配置对比

yml:

 properties:

4.2 yml使用进阶 

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

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

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

yml配置:

@RestController
public class PropertiesController {@Value("${int.value}")private int intValue;@RequestMapping("/readInt")public String readAll() {return "intValue:" + this.intValue ;}
}

在postman中测试    访问127.0.0.1:9090/readInt 

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

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

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

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

在ReadYml中实现如下代码:

@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 : " + str1);System.out.println("str2 : " + str2);System.out.println("str3 : " + str3);return "yml";}
}

运行结果如下:

 4.2.2 配置对象

在yml中配置对象:

student:id: 1name: zhangsanage: 18

此时要使用另⼀个注解 @ConfigurationProperties 来读取

package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@ConfigurationProperties(prefix = "student")
@Data
public class Student {private Integer id;private String name;private Integer age;
}

调用类(StudentController)的实现如下:

package com.example.demo.controller;import com.example.demo.model.Student;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class StudentController {@Autowiredprivate Student student;@RequestMapping("/readStudent")public String readStudent() {return student.toString();}
}

访问 http://127.0.0.1:8080/readStudent:结果如下:

4.2.3 配置集合

配置文件也可以配置list集合:

dbtypes:name:-- mysql-- sqlserver-- db

集合的读取和对象⼀样,也是使用 @ConfigurationProperties 来读取

package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.List;
import java.util.Map;@Component
@ConfigurationProperties(prefix = "dbtypes")
@Data
public class DBType {private List<String> name;private Map map;
}

访问集合的实现如下:

@RestController
public class ReadYml {@AutowiredDBType dbType;@RequestMapping("/readList")public String readList() {return dbType.toString();}
}

访问 127.0.0.1:8080/readList 结果如下:

 4.2.4 配置Map

配置文件也可以配置map

maptypes:map:key1: value1key2: value2key3: value3

Map的读取和对象⼀样,也是使用@ConfigurationProperties 来读取

package com.example.demo.model;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;import java.util.HashMap;@Component
@ConfigurationProperties(prefix = "maptypes")
@Data
public class MapConfig {private HashMap<String, String> map;
}

打印类的实现:

package com.example.demo.controller;import com.example.demo.model.DBType;
import com.example.demo.model.MapConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class ReadYml {@AutowiredMapConfig mapConfig;@RequestMapping("/readMap")public String readMap() {return mapConfig.toString();}
}

访问:127.0.0.1:8080/readMap 返回结果如下:

 五、使用yml的好处

优点:
1.可读性高,写法简单,易于理解
2.  支持更多的数据类型,可以简单表达对象,数组,List,Map等数据形态.

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

缺点:

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

xml 和 properties的对比图如下:

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

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

相关文章

下载arm架构的deb包的方法

在ARM板上操作 如果你是在arm板上使用apt安装和下载包&#xff0c;那么安装过的包会在以下路径里&#xff1a; /var/cache/apt/archives只需要复制出来就可以 如果只下载不安装&#xff0c;可以使用命令 sudo apt-get -d install package_name:arm64 # 如果是32位&#xff0…

TypeScript 学习 -类型 - 9

声明合并 成员变量合并&#xff1a;成员变量会合并&#xff0c;但类型必须一致。成员函数合并&#xff1a;如果函数签名不同&#xff0c;合并后的函数会是签名的联合类型。接口声明顺序&#xff1a;在同一个接口内按顺序合并&#xff1b;不同接口时&#xff0c;后声明的会覆盖…

第05章 14 绘制人脸部的PolyData并使用小圆锥体来展现法线

在VTK中&#xff0c;绘制人脸部的PolyData并使用小圆锥体来展现法线是一个常见的任务。这个过程可以通过以下步骤实现&#xff1a; 读取人脸部的PolyData&#xff1a;可以使用VTK的读取模块读取一个包含人脸部的.vtk或.obj文件。计算法线&#xff1a;使用VTK的vtkPolyDataNorm…

set集合

set集合 Set系列集合&#xff1a; 无序&#xff1a;存取顺序不一致 不重复&#xff1a;可以去除重复 无索引&#xff1a;没有带索引的方法&#xff0c;所以不能使用普通for循环遍历&#xff0c;也不能通过索引来获取元素 可以看出set是无序的存和打印的顺序不一样 Set接中的…

马尔科夫模型和隐马尔科夫模型区别

我用一个天气预报和海藻湿度观测的比喻来解释&#xff0c;保证你秒懂&#xff01; 1. 马尔可夫模型&#xff08;Markov Model, MM&#xff09; 特点&#xff1a;状态直接可见 场景&#xff1a;天气预报&#xff08;晴天→雨天→阴天…&#xff09;核心假设&#xff1a; 下一个…

「 机器人 」系统辨识实验浅谈

前言 系统辨识实验是一种通过实验和数据分析的方法,用于建立物理系统的数学模型的技术。系统辨识是控制工程和系统科学中的重要环节,尤其是在模型未知或复杂的情况下。以下是系统辨识实验的详细介绍: 1. 系统辨识实验的目的 1.1 建模 为动态系统(如机械系统、电气系统或生…

Word List 1

词汇表中的生词 词汇表中的词组成的搭配&#xff08;我不太认识的&#xff0c;认识的就不写了&#xff09;、重要的派生词 例句中的生词 我自己写的生词&#xff08;用于区分易混淆的词&#xff09; Word List 1 英文音标中文traditional belief传统信条traditional metho…

数论问题76一一容斥原理

容斥原理是一种计数方法&#xff0c;用于计算多个集合的并集中元素的个数&#xff0c;以避免重复计算。以下是其基本内容及相关公式&#xff1a; 两个集合的容斥原理 若有集合A和集合B&#xff0c;那么A与B的并集中元素的个数等于A集合元素个数加上B集合元素个数&#xff0c;再…

python-decouple和 django-environ管理 Python/Django 项目中的环境变量

在现代软件开发中,环境变量的管理是一个至关重要的任务。环境变量通常用于存储敏感信息(如 API 密钥、数据库凭据)或配置信息(如调试模式、日志级别)。为了更安全、更方便地管理环境变量,Python 社区提供了许多工具,其中最流行的两个是 python-decouple 和 django-envir…

SimpleFOC STM32教程10|基于STM32F103+CubeMX,速度闭环控制(有电流环)

导言 SimpleFOC STM32教程09&#xff5c;基于STM32F103CubeMX&#xff0c;ADC采样相电流 如上图所示, 增加了电流环. 效果如下&#xff1a; 20250123-200906 RTT 如上图所示&#xff0c;三相占空比依然是马鞍波。当我用手去给电机施加阻力时&#xff0c;PID要维持目标转速&am…

基于蓝牙6.0的RSSI和UWB融合定位方法,可行性分析

融合RSSI&#xff08;接收信号强度指示&#xff09;和UWB&#xff08;超宽带&#xff09;两种技术进行蓝牙6.0定位是完全可行的&#xff0c;并且可以带来更高的定位精度和稳定性。本文给出分析和MATLAB仿真结果 文章目录 技术优势RSSIUWB融合的优势 实现方案数据融合算法硬件要…

团体程序设计天梯赛-练习集——L1-024 后天

前言 首先祝大家新年快乐&#xff0c;然后博主今点炮让炮崩了一下&#xff0c;水一天 这道题5分非常简单&#xff0c;有不少的做法 L1-024 后天 如果今天是星期三&#xff0c;后天就是星期五&#xff1b;如果今天是星期六&#xff0c;后天就是星期一。我们用数字1到7对应星期…

C#:25大前沿特性揭秘

一、引言 C#&#xff0c;这门诞生于 2000 年的编程语言&#xff0c;自问世以来便在软件开发领域留下了浓墨重彩的一笔。它是微软.NET 框架的旗舰语言&#xff0c;由安德斯・海尔斯伯格&#xff08;Anders Hejlsberg&#xff09;领导的团队精心打造 &#xff0c;设计哲学融合了…

LeetCode100之全排列(46)--Java

1.问题描述 给定一个不含重复数字的数组 nums &#xff0c;返回其 所有可能的全排列 。你可以 按任意顺序 返回答案 示例1 输入&#xff1a;nums [1,2,3] 输出&#xff1a;[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]] 示例2 输入&#xff1a;nums [0,1] 输出&#xf…

富文本 tinyMCE Vue2 组件使用简易教程

参考官方教程 TinyMCE Vue.js integration technical reference Vue2 项目需要使用 tinyMCE Vue2 组件(tinymce/tinymce-vue)的第 3 版 安装组件 npm install --save "tinymce/tinymce-vue^3" 编写组件调用 <template><Editorref"editor"v-m…

Babylon.js 中的 setHardwareScalingLevel和getHardwareScalingLevel:作用与配合修改内容

在 Babylon.js 中&#xff0c;Engine类提供了setHardwareScalingLevel和getHardwareScalingLevel方法&#xff0c;用于管理和调整渲染分辨率与屏幕分辨率的比例。这些方法在优化性能和提升画质方面非常有用。尤其是在某些平台不支持硬件反锯齿时&#xff0c;可以考虑使用setHar…

从理论到实践:Django 业务日志配置与优化指南

在现代 Web 开发中,日志记录是确保系统可维护性和可观测性的重要手段。通过合理的日志配置,我们可以快速定位问题、分析系统性能,并进行安全审计。本文将围绕 Django 框架,详细介绍如何配置和优化业务日志,确保开发环境和生产环境都能高效地记录和管理日志。 © ivwdc…

项目集成Nacos

文章目录 1.环境搭建1.创建模块 sunrays-common-cloud-nacos-starter2.目录结构3.pom.xml4.自动配置1.NacosAutoConfiguration.java2.spring.factories 5.引入cloud模块通用依赖 2.测试1.创建模块 sunrays-common-cloud-nacos-starter-demo2.目录结构3.pom.xml4.application.ym…

doris:JSON

JSON 数据类型&#xff0c;用二进制格式高效存储 JSON 数据&#xff0c;通过 JSON 函数访问其内部字段。 默认支持 1048576 字节&#xff08;1 MB&#xff09;&#xff0c;可调大到 2147483643 字节&#xff08;2 GB&#xff09;&#xff0c;可通过 BE 配置string_type_length…

K8S 启动探测、就绪探测、存活探测

先来思考一个问题&#xff1a; 在 Deployment 执行滚动更新 web 应用的时候&#xff0c;总会出现一段时间&#xff0c;Pod 对外提供网络访问&#xff0c;但是页面访问却发生404&#xff0c;这个问题要如何解决呢&#xff1f;学完今天的内容&#xff0c;相信你会有自己的答案。 …