Spring —— Spring Boot 配置文件
|  | 
JavaEE
Spring —— Bean 作用域和生命周期
Spring —— Spring Boot 创建和使用
目录
- Spring Boot 配置文件
- Spring Boot 配置文件格式
- properties配置文件
- properties 基本语法
- properties 缺点
 
- yml 配置文件
- yml 基本语法
- yml 配置不同类型数据及 null
- yml 配置对象
- yml 配置集合
 
- properties VS yml
- 设置不同环境的配置文件
 
Spring Boot 配置文件
如果没有配置信息, Spring Boot 项目就不能连接和此操作数据库, 甚至是不能保存可以用于排查问题的关键日志, 配置文件的作用是非常重要的.
- 系统使用的配置文件 (系统配置文件), 如端口号的配置, 链接数据库的配置
- 用户自定义配置文件
Spring Boot 配置文件格式
- .properties
- .yml (yaml)

# 注意事项 #
- 当一个项目中, 存在两种格式的配置文件, 并且两个配置文件间中设置了相同的配置项, 但之不同时. .properties配置文件的优先级最高, 但加载完 .properties 文件之后, 也会加载.yml文件的配置信息.
- 理论上讲 .properties可以和.yml共存, 但实际业务中, 我们通常会采用一种统一的配置文件格式, 这样可以更好的维护.
properties配置文件
properties 基本语法
# properies 以键值的形式配置的: key=vaule.
# 设置端口号
server.port=8888

# 我们还可以自定义配置项
myTest=gujiu
我们还可以读取配置项中的内容, 使用 @Value 注解来实现, @Value 注解使用 “${}” 的格式读取.
@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController {@Value("${myTest}")private String mytest;@RequestMapping("/getconf")public String getConfig() {return mytest;}
}
注:不可以用 @Value(“myTest”) 读取, 其含义是, 将字符串赋值给 mytest 变量.
properties 缺点
当我们想配置数据库的时候.
# 连接数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=123456
从上述配置 key 中可以看出, properties 配置文件中会有很多的冗余信息.

想要解决这个问题,就可以使用 yml 配置⽂件的格式化了.
yml 配置文件
yml (YAML - Yet Another Markup Language) 翻译成中文 “另一种标记语言”
yml 优点
- yml是一个可读性高, 写法简单, 易于理解, 他的语法和- JSON语言类似.
- yml支持更多的数据类型, 它可以简单表达清单 (数组), 散列表, 标量等数据形态, 它使用空白符号缩进和大量依赖外观的特色, 特别时候来表达或编辑数据结构, 各种配置文件等.
- yml支持更多的编程语言, 它不只是- Java中可以使用在 Golang, PHP, Python, Ruby, JavaScripy, Perl 中.
yml 基本语法
yml 是树形结构的配置文件: key: vaule .
# 注意 #key 和 vaule 直接使用英文冒号加空格的方式组成, 空格不可省略.
# 配置端口
server:port: 6666
# 自定义配置  
mytest2: gugu
同样是使用 @Value 注解使用 “${}” 的格式读取.
@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController {@Value("${mytest2}")private String myTest;@RequestMapping("/getconf2")public String getConfig2() {return myTest;} 
}

当我们配置数据库连接
# 配置数据库连接
spring:datasource:url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8username: rootpassword: 123456

yml 配置不同类型数据及 null
# 字符串
string.value: Hello# 布尔值,true或false
boolean.value: true
boolean.value1: false# 整数
int.value: 10
int.value1: 0b1010_0111_0100_1010_1110 # ⼆进制# 浮点数
float.value: 3.14159
float.value1: 314159e-5 # 科学计数法# Null,~代表null
null.value: ~
注意事项:value 值加单双引号
# 字符串
str1: Hello \n Spring Boot.
str2: 'Hello \n Spring Boot.'
str3: "Hello \n Spring Boot."
读取一下, str1, str2, str3.
@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController {@Value("${str1}")private String str1;@Value("${str2}")private String str2;@Value("${str3}")private String str3;@PostConstructpublic void postConstruct() {System.out.println("str1: " + str1);System.out.println("str2: " + str2);System.out.println("str3: " + str3);}
}
运行结果展示:

# 注意事项 #
- 字符串默认不⽤加上单引号或者双引号.
- 单引号会转义特殊字符,特殊字符最终只是⼀个普通的字符串数据.
- 双引号不会转义字符串里面的特殊字符;特殊字符会作为本身想表示的意思.
yml 配置对象
比如: 我们配置一个学生对象
student:id: 1name: Gujiuage: 18
或者使用行内写法
student: {id: 1,name: Gujiu,age: 18}

读取配置对象
这个时候就不能用 @Value 来读取配置中的对象了,此时要使用另⼀个注解 @ConfigurationProperties 来读取
# 首先要创建一个实体类:
@Component
@ConfigurationProperties(value = "student")
@Data
public class Student {private int id;private String name;private int age;}

# 调用类代码
@Controller // 当前类为控制器
@ResponseBody // 返回的是数据, 而非页面
public class TestController {@Autowiredprivate Student student;@PostConstructpublic void postConstruct() {System.out.println(student);}
}//运行结果: Student(id=1, name=Gujiu, age=18)
yml 配置集合
配置文件也可以配置 list 集合
mynames:name:- Gujiu- GUJIU- gugu
或者使用行内写法
mynames: {name: [Gujiu,GUJIU,gugu]}

读取配置对象
和读取对象一样, 使用 @ConfigurationProperties 来读取
@Component
@ConfigurationProperties("mynames")
@Data
public class ListConfig {private List<String> name;
}
properties VS yml
- 二者都是 Spring Boot的配置文件, 二者的诞生时间是不同的.properties是默认的配置文件, 诞生的比较早.yml是后来才出现的另一种标记语言的配置文件.
- properties 是以 key=vaule的形式配置的键值类型的配置文件, 而 yml 使用的类似JSON格式的树形配置方式进行配置的. yml 层级之间使用换行缩进的方式配置,key 和 value 之间使用 “: ” 英文冒号加空格的方式设置,并且空格不可省略.
- properties为早期并且默认的配置文件格式,但其配置存在⼀定的冗余数据,使⽤- yml可以很好的解决数据冗余的问题
- yml通用性更好, 支持更多语言,如 Java、Go、Python 等,如果是云服务器开发,可以使用一份配置⽂件作为 Java 和 Go 的共同配置文件.
- yml功能比较强大, 支持更多的数据类型, 对中文的兼容性非常好.
设置不同环境的配置文件
-  创建不同环境的配置文件: - application-dev.yml (开发环境)
- application-prod.yml (生产环境)
- …
 
-  在 application.yml中设置运行环境:# 开发环境 spring:profiles:active: dev# 生产环境 spring:profiles:active: prod
|  | 
以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!
 
 
相关文章:
 
Spring —— Spring Boot 配置文件
JavaEE传送门 JavaEE Spring —— Bean 作用域和生命周期 Spring —— Spring Boot 创建和使用 目录 Spring Boot 配置文件Spring Boot 配置文件格式properties配置文件properties 基本语法properties 缺点 yml 配置文件yml 基本语法yml 配置不同类型数据及 nullyml 配置对象…...
 
Python 网络爬虫与数据采集(一)
Python 网络爬虫与数据采集 第1章 序章 网络爬虫基础1 爬虫基本概述1.1 爬虫是什么1.2 爬虫可以做什么1.3 爬虫的分类1.4 爬虫的基本流程1.4.1 浏览网页的流程1.4.2 爬虫的基本流程 1.5 爬虫与反爬虫1.5.1 爬虫的攻与防1.5.2 常见的反爬与反反爬 1.6 爬虫的合法性与 robots 协议…...
 
2023年6月DAMA-CDGP数据治理专家认证请尽快报名啦!
目前6月DAMA-CDGP数据治理认证考试开放报名地区有:北京、上海、广州、深圳、长沙、呼和浩特。 目前南京、济南、西安、杭州等地区还在接近开考人数中,打算参加6月考试的朋友们可以抓紧时间报名啦!!! 5月初,…...
 
STM32+esp8266,让你的STM32开发板连接网络-----esp8266
分享一下,STM32开发板连接网络的第一种方法:连接esp8266。 esp8266与STM32利用串口通信连接,esp8266连接网络,把收到的数据通过串口的方式传输给STM32,之后STM32接收到消息做出对应的反应。 使用到的开发板如图&…...
分布式缓存的基础知识
前言 现代互联网应用中,分布式缓存成为了必不可少的一环。它通过在多台服务器之间共享数据,避免了网络通信的高延迟和低带宽的性能问题。本文将介绍分布式缓存的基础知识,包括缓存机制、常见的缓存策略以及缓存的使用场景。 缓存机制 缓存是…...
Vue3通透教程【七】生命周期函数
文章目录 🌟 写在前面🌟 生命周期钩子函数🌟 组合式API生命周期🌟 写在最后🌟 写在前面 专栏介绍: 凉哥作为 Vue 的忠实 粉丝输出过大量的 Vue 文章,应粉丝要求开始更新 Vue3 的相关技术文章,Vue 框架目前的地位大家应该都晓得,所谓三大框架使用人数最多,公司选…...
《“裸奔”时代的网络防护:如何保护你的隐私和数据安全》
一、引言 在此时此刻,你可能正在使用电子设备阅读这篇文章。你可能在一天中的大部分时间都在与网络世界互动,无论是通过电子邮件、社交媒体、在线购物,还是通过流媒体服务消费内容。然而,你有没有考虑过,当你在享受这些…...
mapreduce优化方法
1)数据输入: 1)合并小文件:在执行mr任务前将小文件进行合并,大量的小文件会产生大量的map任务,增大map任务装载次数,而 任务的装载比较耗时,从而导致 mr 运行较慢。 2)…...
06-nexus搭建Docker私仓
使用nexus创建docker私有仓库 Nexus的安装请参考该文档:https://www.yuque.com/tmfl/pom/uumrx2 Nexus配置Docker仓库步骤; nexus默认docker是失效的,需要 在security --> Realms,将docker配置成Active在 Repository 的 Blo…...
 
【RS专题】eval层混淆和逻辑完整分析 - 扣代码终结篇
如有侵权、联系本人下架 首先明确一下目标,我们要先获取网页200的源代码,RS5代第一次响应为412,第二次为200。如果是200就表示正常 以下为某 yjj RS5请求成功的结果,具体流程请看完文章,源-码–答-案也会在末 尾公 布 前面是定义了非常多和函数,一直往下拉,直到出现v…...
 
基于matlab使用主动声纳系统进行水下目标检测
一、前言 此示例演示如何模拟具有两个目标的主动单基地声纳方案。声纳系统由各向同性投影仪阵列和单个水听器元件组成。投影仪阵列呈球形。反向散射信号由水听器接收。接收到的信号包括直接和多路径贡献。 二、水下环境 在浅水环境中,声源和目标之间存在多个传播路径…...
[socket]hpsocket-pull模式
为什么要用pull模式呢,我不是所谓的别人说pull效率高,是因为包头的长度 int不是固定长度。服务器IO-HPSocket PUSH:收到数据立马触发OnReceive,由开发人员自己实现拆包和缓冲区的管理逻辑。 PULL:收到数据立马触发OnR…...
 
数据分析师 ---- SQL强化(3)
数据分析师 ---- SQL强化(3) 题目:每个月Top3的周杰伦歌曲 从听歌流水中找到18-25岁用户在2022年每个月播放次数top 3的周杰伦的歌曲 输入例子: drop table if exists play_log; create table play_log (fdate date,user_id int,song_id int ); inser…...
 
微信小程序商品分类页最佳实践
首先我们来分析下UI小妹发来的产品原型图: 微信小程序商品分类页需要实现 1.单击左边的商品类目,右侧实现联动跳转到对应商品类目标题; 2.触屏拖动右侧商品列表,右侧跳转到对应商品类目; 2.分析需求我们可以把屏幕分…...
 
正则化解决过拟合
本片举三个例子进行对比,分别是:不使用正则化、使用L2正则化、使用dropout正则化。 首先是前后向传播、加载数据、画图所需要的相关函数的reg_utils.py: # -*- coding: utf-8 -*-import numpy as np import matplotlib.pyplot as plt impor…...
 
在 Windows 上安装 Helm包
一、前言 个人主页: ζ小菜鸡大家好我是ζ小菜鸡,让我们一起学习在 Windows 上安装 Helm包。如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连) 二、 Helm是什么 Helm是Kubernetes的包管理工具,类似于centos的yum,能够快速查找、下载和安装…...
 
Clion开发STM32之OTA升级模块(一)
什么是OTA 百度百科解释个人理解:就是不通过烧录的方式,通过串口、网口、无线对主板运行的程序进行升级。减少后期的一个维护迭代程序的一个成本。 STM32的OTA升级模块的一个设计 程序启动的一个框架流程图(大致流程) FLASH的一个划分框图 BootLoader…...
Java供应链安全检测SDL方法论
近些年,开源程序陆续爆出安全漏洞,轻则影响用户体验,重则业务应用沦陷。大量的业务应用以及每天数千次的迭代,使得自动检测和治理第三方开源程序成为企业安全建设的必要一环。如何来建设这一环呢?SCA(软件成分分析) 概念 什么是SCA? 源代码或二进制扫描的软件成分分析 什…...
 
Magic-API的部署
目录 概述简介特性 搭建创建元数据表idea新建spring-boot项目pom.xmlapplication.properties打包上传MagicAPI-0.0.1-SNAPSHOT.jar开启服务访问 magic语法 概述 简介 magic-api是一个基于Java的接口快速开发框架,编写接口将通过magic-api提供的UI界面完成…...
 
程序进制换算
进制数介绍 一、进制介绍 二进制 :0或1,满2进1,以0B或者0b开头,如 0b1101 八进制:0-7,满8进1,,以0开头,如0234 十进制:0-9,满10进1,…...
 
业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...
 
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
 
使用分级同态加密防御梯度泄漏
抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…...
 
渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
Java编程之桥接模式
定义 桥接模式(Bridge Pattern)属于结构型设计模式,它的核心意图是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式通过组合关系来替代继承关系,从而降低了抽象和实现这两个可变维度之间的耦合度。 用例子…...
LRU 缓存机制详解与实现(Java版) + 力扣解决
📌 LRU 缓存机制详解与实现(Java版) 一、📖 问题背景 在日常开发中,我们经常会使用 缓存(Cache) 来提升性能。但由于内存有限,缓存不可能无限增长,于是需要策略决定&am…...
 
uniapp 开发ios, xcode 提交app store connect 和 testflight内测
uniapp 中配置 配置manifest 文档:manifest.json 应用配置 | uni-app官网 hbuilderx中本地打包 下载IOS最新SDK 开发环境 | uni小程序SDK hbulderx 版本号:4.66 对应的sdk版本 4.66 两者必须一致 本地打包的资源导入到SDK 导入资源 | uni小程序SDK …...
