Spring Boot 实例解析:配置文件
-
SpringBoot 的热部署:
- Spring 为开发者提供了一个名为 spring-boot-devtools 的模块来使用 SpringBoot 应用支持热部署,提高开发者的效率,无需手动重启 SpringBoot 应用
- 引入依赖:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <optional>true</optional> </dependency>
- 修改 Java 代码或者配置文件模板后可以通过 Ctrl + F9 来实现热部署
-
配置文件:
- SpringBoot 使用一个全局的配置文件,配置文件名是固定的
- application.properties
- application.yml
- 配置文件的作用:修改 SpringBoot 自动装配的默认值,SpringBoot 在底层都给自动配置好
- 标记语言:
- 以前的配置文件:大多都是 xx.xml 文件
- YAML:以数据为中心,比 json、xml 更适合做配置文件
- 例如:
- SpringBoot 使用一个全局的配置文件,配置文件名是固定的
-
YAML 语法:
- 基本语法:
- K:(空格) V:表示一对键值对(空格必须有)
- 只要是左对齐的一列数据,都是同一个层级的
- 属性和值也是大小写敏感:
- 值的写法:
- 字面量:普通的值(数字、字符串、布尔)
- K:V:字面量直接来写
- 字符串默认不用加上单引号或双引号
- " ":双引号,不会转义字符串里面的特殊字符,特殊字符会作为本身想表示的意思:
- 例如:name:"zhangsan \n lisi" ==输出==> zhangsan 换行 lisi
- ' ':单引号,会转义特殊字符,特殊字符最终只是一个普通的字符串数据
- 例如:name:'zhangsan \n lisi' ==输出==> zhangsan \n lisi
- 基本语法:
-
对象、Map(属性和值):
- K:V:在下一行来写对象的属性和值的关系,注意缩进
- 对象:key:value 方式
- 数组:用 - 表示数组中的一个元素
-
配置文件注入:
- 配置文件:
person:laseName: helloage: 18boss: falsebirth: 2019-09-09maps: {k1:v1,k2:v2}lists: - lisi- zhaoliiudog: name: 小狗age: 12
- JavaBean:
@Component @ConfigurationProperties(prefix = "person") public class Person {private String laseName;private Integer age;private Boolean boss;private Date birth;private Map<String, Object> maps;private List<Object> lists;private Dog dog; }
- 导入文件处理器:
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional> </dependency>
- properties 配置文件在 IDEA 中默认 UTF-8 乱码问题:
- @Value 获取值和@ConfigurationProperties 获取值比较:
- 松散绑定:大小写区别,@ConfigurationProperties 会自动找到驼峰命名法的哪个字段 ==> @Value 注解不支持自动寻找
- SqEL:@Value 注解中可以使用 #{} 和 ${} 进行赋值,而 @ConfigurationProperties 不支持这样赋值
- JSR303 数据校验:例如 @Emile 注解
- 在 @ConfigurationProperties 中加入这个注解,在配置文件中相对应的形式应给为 Emile 形式,否则会报错
- 在 @Value 注解注入值使用这个数据校验注解是无效的
- 复杂数据封装:
- @Value 注解不支持除基本数据类型以外类型封装,而 @ConfigurationProperties 注解支持复杂数据封装
- @Value 注解不支持除基本数据类型以外类型封装,而 @ConfigurationProperties 注解支持复杂数据封装
- 在某个业务中获取一个配置文件中的某个值,使用 @Value 注解
- 编写一个 JavaBean 来和配置文件进行映射,直接使用 @ConfigurationProperties 注解
- 配置文件:
spring.application.name=S45SpringBootDemoApplicationTestsperson.email=kkkk person.hello=lucky person.last-name=张三 person.birth=2017/2/4 person.age=19 person.boss=true person.list="dog,cat,animal" person.maps.key1=value1 person.maps.key2=value2 person.dog.name=${person.hello}_dog person.dog.age=12
- @Value 注解:注入值数据校验
- 注意:@Value 注解不能注入复杂属性(对象,集合等)
@Conponent @Validated //加入校验方式 public class Person {//传入的值必须是邮箱格式,否则会报错@Emailprivate String email;private String hello;//${} : 为取值和 application.properties 配置文件中字段一样的值@Value("${person.last-name}")private String lastName;//#{} : 可以写表达式@Value("#{3*2}")private Integer age;//@Value 注解也可以直接赋值@Value("true")private boolean boss;//@Value注解不能注入复杂属性private Date birth;private Map<String,String> maps;private List<String> list;//set get 方法}
- 注意:@Value 注解不能注入复杂属性(对象,集合等)
- @ConfigurationProperties 注解映射注入属性:
- 注意:容器中的组件才能使用该注解
@Component //将本类中的所有属性和配置文件中 person2 下面的所有属性进行映射 @ConfigurationProperties(prefix = "person2") @Validated //校验注解 public class Person2 {String email;String hello;String lastName;int age;boolean boss;Date birth;Map<String,String> maps;List<String> list;Dog dog; }
- 注意:容器中的组件才能使用该注解
- 导入配置文件处理器:
<!‐‐导入配置文件处理器,配置文件进行绑定就会有提示‐‐> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring‐boot‐configuration‐processor</artifactId><optional>true</optional> </dependency>
- 配置文件:
-
@PropertySource & @ImportResource & @Bean:
- @PropertySource:加载指定的配置文件
//@PropertySource:加载指定配置文件 @PropertySource(value={"classpath:person2.properties"}) @Component //将本类中的所有属性和配置文件中 person2 下面的所有属性进行映射 @ConfigurationProperties(prefix = "person2") public class Person2 {String email;String hello;String lastName;int age;boolean boss;Date birth;Map<String,String> maps;List<String> list;Dog dog; }
- @ImportResource:导入 Spring 的配置文件,让配置文件里面的内容生效
- SpringBoot 里面没有 Spring 的配置文件,我们自己编写的配置文件也不能自动识别
- 编写 applicationContext.xml 文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="personservice" class="com.example.springbootdemo.Service.impl.Person2ServiceImpl"></bean> </beans>
- 导入 Spring 的配置让其生效:
- 配置类注入测试:
@RunWith(SpringRunner.class) @SpringBootTest public class TxDemo3ApplicationTests {//注入对象@AutowiredApplicationContext applicationContext;@Testpublic void contextLoads01() {System.out.println(applicationContext.getBean("personservice"));} }
- @Bean:给容器中添加组件
- 配置类 @Configuration ==> 配置文件
- 使用 @Bean 给容器中添加组件
//@Configuration:标明当前是一个配置类,代替之前的 Spring 配置文件 @Configuration public class MyAppConfig {//将方法返回的值添加到容器当中,当前组件默认 ID 为当前文件名//@Bean注解给容器中添加组件@Beanpublic HelloService HelloService01(){System.out.println("配置类 @Bean 给容器中添加了组件");return new HelloServiceImpl();} }
- @PropertySource:加载指定的配置文件
相关文章:

Spring Boot 实例解析:配置文件
SpringBoot 的热部署: Spring 为开发者提供了一个名为 spring-boot-devtools 的模块来使用 SpringBoot 应用支持热部署,提高开发者的效率,无需手动重启 SpringBoot 应用引入依赖: <dependency> <groupId>org.springfr…...

pytorch图神经网络处理图结构数据
人工智能例子汇总:AI常见的算法和例子-CSDN博客 图神经网络(Graph Neural Networks,GNNs)是一类能够处理图结构数据的深度学习模型。图结构数据由节点(vertices)和边(edges)组成&a…...
计算机网络一点事(23)
传输层 端口作用:标识主机特定进程,TCP,UDP协议 端口号分类:服务器:0-1023,熟知 1024-49151 登记 客户端:49152-65535 功能:实现端到端,进程到进程的通信,…...

(9)下:学习与验证 linux 里的 epoll 对象里的 EPOLLIN、 EPOLLHUP 与 EPOLLRDHUP 的不同。小例子的实验
(4)本实验代码的蓝本,是伊圣雨老师里的课本里的代码,略加改动而来的。 以下是 服务器端的代码: 每当收到客户端的报文时,就测试一下对应的 epoll 事件里的事件标志,不读取报文内容,…...

DeepSeek-R1模型1.5b、7b、8b、14b、32b、70b和671b有啥区别?
deepseek-r1的1.5b、7b、8b、14b、32b、70b和671b有啥区别?码笔记mabiji.com分享:1.5B、7B、8B、14B、32B、70B是蒸馏后的小模型,671B是基础大模型,它们的区别主要体现在参数规模、模型容量、性能表现、准确性、训练成本、推理成本…...

一、html笔记
(一)前端概述 1、定义 前端是Web应用程序的前台部分,运行在PC端、移动端等浏览器上,展现给用户浏览的网页。通过HTML、CSS、JavaScript等技术实现,是用户能够直接看到和操作的界面部分。上网就是下载html文档,浏览器是一个解释器,运行从服务器下载的html文件,解析html、…...

AI大模型开发原理篇-2:语言模型雏形之词袋模型
基本概念 词袋模型(Bag of Words,简称 BOW)是自然语言处理和信息检索等领域中一种简单而常用的文本表示方法,它将文本看作是一组单词的集合,并忽略文本中的语法、词序等信息,仅关注每个词的出现频率。 文本…...

基于微信小程序的实习记录系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...

【LLM】DeepSeek-R1-Distill-Qwen-7B部署和open webui
note DeepSeek-R1-Distill-Qwen-7B 的测试效果很惊艳,CoT 过程可圈可点,25 年应该值得探索更多端侧的硬件机会。 文章目录 note一、下载 Ollama二、下载 Docker三、下载模型四、部署 open webui 一、下载 Ollama 访问 Ollama 的官方网站 https://ollam…...
【Elasticsearch】 Intervals Query
Elasticsearch Intervals Query 返回基于匹配术语的顺序和接近度的文档。 intervals 查询使用 匹配规则,这些规则由一小组定义构建而成。这些规则然后应用于指定 field 中的术语。 这些定义生成覆盖文本中术语的最小间隔序列。这些间隔可以进一步由父源组合和过滤…...
DeepSeek技术深度解析:从不同技术角度的全面探讨
DeepSeek技术深度解析:从不同技术角度的全面探讨 引言 DeepSeek是一个集成了多种先进技术的平台,旨在通过深度学习和其他前沿技术来解决复杂的问题。本文将从算法、架构、数据处理以及应用等不同技术角度对DeepSeek进行详细分析。 一、算法层面 深度学…...

Docker 部署 Starrocks 教程
Docker 部署 Starrocks 教程 StarRocks 是一款高性能的分布式分析型数据库,主要用于 OLAP(在线分析处理)场景。它最初是由百度的开源团队开发的,旨在为大数据分析提供一个高效、低延迟的解决方案。StarRocks 支持实时数据分析&am…...

【LLM-agent】(task6)构建教程编写智能体
note 构建教程编写智能体 文章目录 note一、功能需求二、相关代码(1)定义生成教程的目录 Action 类(2)定义生成教程内容的 Action 类(3)定义教程编写智能体(4)交互式操作调用教程编…...

29.Word:公司本财年的年度报告【13】
目录 NO1.2.3.4 NO5.6.7 NO8.9.10 NO1.2.3.4 另存为F12:考生文件夹:Word.docx选中绿色标记的标题文本→样式对话框→单击右键→点击样式对话框→单击右键→修改→所有脚本→颜色/字体/名称→边框:0.5磅、黑色、单线条:点…...
14 2D矩形模块( rect.rs)
一、 rect.rs源码 // Copyright 2013 The Servo Project Developers. See the COPYRIGHT // file at the top-level directory of this distribution. // // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or // http://www.apache.org/licenses/LICENS…...

【Unity3D】实现2D角色/怪物死亡消散粒子效果
核心:这是一个Unity粒子系统自带的一种功能,可将粒子生成控制在一个Texture图片网格范围内,并且粒子颜色会自动采样图片的像素点颜色,之后则是粒子编辑出消散效果。 Particle System1物体(爆发式随机速度扩散10000个粒…...

Linux - 进程间通信(3)
目录 3、解决遗留BUG -- 边关闭信道边回收进程 1)解决方案 2)两种方法相比较 4、命名管道 1)理解命名管道 2)创建命名管道 a. 命令行指令 b. 系统调用方法 3)代码实现命名管道 构建类进行封装命名管道&#…...

3、C#基于.net framework的应用开发实战编程 - 实现(三、三) - 编程手把手系列文章...
三、 实现; 三.三、编写应用程序; 此文主要是实现应用的主要编码工作。 1、 分层; 此例子主要分为UI、Helper、DAL等层。UI负责便签的界面显示;Helper主要是链接UI和数据库操作的中间层;DAL为对数据库的操…...
C++编程语言:抽象机制:泛型编程(Bjarne Stroustrup)
泛型编程(Generic Programming) 目录 24.1 引言(Introduction) 24.2 算法和(通用性的)提升(Algorithms and Lifting) 24.3 概念(此指模板参数的插件)(Concepts) 24.3.1 发现插件集(Discovering a Concept) 24.3.2 概念与约束(Concepts and Constraints) 24.4 具体化…...
Python面试宝典13 | Python 变量作用域,从入门到精通
今天,我们来深入探讨一下 Python 中一个非常重要的概念——变量作用域。理解变量作用域对于编写清晰、可维护、无 bug 的代码至关重要。 什么是变量作用域? 简单来说,变量作用域就是指一个变量在程序中可以被访问的范围。Python 中有四种作…...

linux之kylin系统nginx的安装
一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源(HTML/CSS/图片等),响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址,提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

微信小程序之bind和catch
这两个呢,都是绑定事件用的,具体使用有些小区别。 官方文档: 事件冒泡处理不同 bind:绑定的事件会向上冒泡,即触发当前组件的事件后,还会继续触发父组件的相同事件。例如,有一个子视图绑定了b…...

【JavaEE】-- HTTP
1. HTTP是什么? HTTP(全称为"超文本传输协议")是一种应用非常广泛的应用层协议,HTTP是基于TCP协议的一种应用层协议。 应用层协议:是计算机网络协议栈中最高层的协议,它定义了运行在不同主机上…...
数据链路层的主要功能是什么
数据链路层(OSI模型第2层)的核心功能是在相邻网络节点(如交换机、主机)间提供可靠的数据帧传输服务,主要职责包括: 🔑 核心功能详解: 帧封装与解封装 封装: 将网络层下发…...
3403. 从盒子中找出字典序最大的字符串 I
3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...

NXP S32K146 T-Box 携手 SD NAND(贴片式TF卡):驱动汽车智能革新的黄金组合
在汽车智能化的汹涌浪潮中,车辆不再仅仅是传统的交通工具,而是逐步演变为高度智能的移动终端。这一转变的核心支撑,来自于车内关键技术的深度融合与协同创新。车载远程信息处理盒(T-Box)方案:NXP S32K146 与…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

GruntJS-前端自动化任务运行器从入门到实战
Grunt 完全指南:从入门到实战 一、Grunt 是什么? Grunt是一个基于 Node.js 的前端自动化任务运行器,主要用于自动化执行项目开发中重复性高的任务,例如文件压缩、代码编译、语法检查、单元测试、文件合并等。通过配置简洁的任务…...