首页/新闻资讯/正文详情

【Spring Boot系列2】还在为配置文件注解头疼?一文带你全部搞定!

发布时间:2026/9/24 17:31:30 来源:云帆数科 栏目:资讯中心
【Spring Boot系列2】还在为配置文件注解头疼?一文带你全部搞定!
讲解SpringBoot的配置文件前我们先学习配置文件读取的相关注解一文带你全部搞定!前言本来想讲解SpringBoot的配置文件但是里面一堆注解让我很是蒙圈感觉用起来都差不多比如PropertySource、ImportResource、Value、ConfigurationProperties等加上之前掌握的Configuration和Bean。一个配置文件搞这么多注解感觉头有点大这篇文章主要是对这些注解进行扫盲希望扫盲完后我以后就不再怕它们了。基于XML方式读取配置为了方便示例讲解我们在包resources下创建一个配置文件jdbc.propertiesjdbc.shop.urljdbc:mysql://localhost:3104/xm_jointly?characterEncodingutf8 jdbc.shop.usernamelouzai jdbc.shop.password123456之前在文章中我们也有这个一个配置但是我们使用XML的方式读取然后还需要在XML中配置文件扫描路径!-- 用于加载配置文件 -- bean classorg.springframework.beans.factory.config.PropertyPlaceholderConfigurer property namelocation valueclasspath:jdbc.properties/value /property /bean然后才能读取里面的配置!-- 定义数据源 -- bean iddataSource classorg.springframework.jdbc.datasource.DriverManagerDataSource property nameurl value${jdbc.shop.url}/property property nameusername value${jdbc.shop.username}/property property namepassword value${jdbc.shop.password}/property /bean那么有没有更优雅的实现方式呢可以继续往下面看。ImportResourceXML中“用于加载配置文件”这块不变直接看示例ImportResource(classpath:applicationContext.xml) public class ImportResourceTest { Value(${jdbc.shop.url}) private String url; Value(${jdbc.shop.username}) private String userName; Value(${jdbc.shop.password}) private String passWord; public static void main(String args[]) { ApplicationContext context new AnnotationConfigApplicationContext(PropertySourceTest.class); PropertySourceTest connection context.getBean(PropertySourceTest.class); System.out.println(connection.toString()); } } // 输出 // PropertySourceTest(urljdbc:mysql://localhost:3104/xm_jointly?characterEncodingutf8, userNamelouzai, passWord123456)通过ImportResource读取配置文件然后通过Value赋值给成员变量Value的用法可以继续往后面看。这种方式感觉还是不太优雅因为还是依赖XML配置有没有完全脱离XML的方式呢PropertySource就登场了。PropertySource ValuePropertySource此注解PropertySource 为Spring 中的 Environment提供方便和声明机制通常与Configuration一起搭配使用直接看示例ComponentScan({com.java.annotation.spring.bean.fileconfig}) Component PropertySource(classpath:jdbc.properties) public class EnvironmentTest { Resource Environment environment; private String url; private String userName; private String passWord; public void getData() { url environment.getProperty(jdbc.shop.url); userName environment.getProperty(jdbc.shop.username); passWord environment.getProperty(jdbc.shop.password); System.out.println(url: url); System.out.println(userName: userName); System.out.println(passWord: passWord); } public static void main(String args[]) { ApplicationContext context new AnnotationConfigApplicationContext(EnvironmentTest.class); EnvironmentTest connection context.getBean(EnvironmentTest.class); connection.getData(); } } // 输出 // url:jdbc:mysql://localhost:3104/xm_jointly?characterEncodingutf8 // userName:louzai // passWord:123456ComponentScan用于扫描EnvironmentTest的beanPropertySource用于引入外部属性配置然后配合Environment可以读取配置的内容这个示例一看就懂So Easy!Value用Environment读取配置感觉好麻烦有没有更简单的方式呢直接看示例ComponentScan({com.java.annotation.spring.bean.fileconfig}) Component PropertySource(classpath:jdbc.properties) ToString public class PropertySourceTest { Value(${jdbc.shop.url}) private String url; Value(${jdbc.shop.username}) private String userName; Value(${jdbc.shop.password}) private String passWord; public static void main(String args[]) { ApplicationContext context new AnnotationConfigApplicationContext(PropertySourceTest.class); PropertySourceTest connection context.getBean(PropertySourceTest.class); System.out.println(connection.toString()); } } // 输出: // DBConnection(urljdbc:mysql://localhost:3104/xm_jointly?characterEncodingutf8, userNamelouzai, passWord123456)直接通过Value进行标注这个也是项目中常用的姿势强烈推荐这种。Value还可以直接为字段赋值获取系统属性这里就不展开了网上资料很多。这种读取配置的方式感觉已经非常优雅了但是每个配置数据都需要通过Value赋值还是有点麻烦有没有更优雅的方式呢ConfigurationProperties登场了。ConfigurationProperties这个是用在SpringBoot中yml配置文件的读取我们先看通过Value逐个读取配置的方式。我们新建一个application.yml配置shop: url: jdbc:mysql://localhost:3104/xm_jointly?characterEncodingutf8 username: louzai password: 123456通过Value方式Service RequestMapping public class HelloWorld { Value(${shop.url}) private String url; Value(${shop.username}) private String userName; Value(${shop.password}) private String passWord; ResponseBody RequestMapping(/hello) public String test() { return url: url , userName: userName , passWord: passWord; } }这个和前面的示例很像只是因为SpringBoot会自动读取application.yml配置所以不用再指定配置文件扫描路径启动SpringBoot程序后输入“http://localhost:8080/hello”输出如下通过ConfigurationProperties方式Service RequestMapping Setter ConfigurationProperties(prefix shop) public class HelloWorld2 { private String url; private String username; private String password; ResponseBody RequestMapping(/hello2) public String test() { return url: url , username: username , password: password; } }启动服务后浏览器输入“http://localhost:8080/hello2”输出如下Configuration Bean这个常用于配置文件管理类用于替换XML中的Bean注入这个必须掌握具体可参考文章《【Spring基础系列3】Spring常用的注解》我们一般会结合上面的配置读取方式然后生成对应的配置类Configuration PropertySource(classpath:es.properties) public class EsConfig { Value(${es.hostname}) private String hostname; Value(${es.port}) private String port; Bean public RestHighLevelClient client() { return new RestHighLevelClient(RestClient.builder(new Node(new HttpHost(hostname, Integer.parseInt(port))))); } }这样我们就可以得到一个配置类EsConfig配置类中的RestHighLevelClient已经通过Bean完成Spring的注入这个也是项目中常用的实现姿势。总结昨天刚陪老婆看了修仙的动画感觉这篇文章就像修仙一样修仙等级炼气→筑基→金丹→元婴→化神→渡劫合道→地仙→天仙→金仙→太乙金仙→大罗金仙→准圣→混元大罗金仙圣人→天道→大道炼气通过XML方式读取配置这个在小米中台的代码中大部分还是这种方式读取配置。筑基通过ImportResource读取XML但是读取数据值的部分移到了对象中即将对象的成员变量用Value赋值。如果还是依赖XML读取数据比如旧的系统代码那这个还是需要使用只是获取数据配置的值可以更优雅一些。金丹干掉XML直接通过PropertySource读取数据配置文件无需XML中转但是配置文件数据用Environment获取。感觉这个已经很少使用了。元婴干掉Environment直接用Value代替这个还是结合PropertySource使用。如果想干掉XML就直接用这个代替吧这个是Spring框架使用配置文件的终极版本。化神已经干掉XML也不用Value一一替换直接通过ConfigurationProperties自动将配置的数据和类的成员变量名关联。这个只基于SpringBoot所以也是我目前遇到的SpringBoot框架使用配置文件的终极版本。渡劫结合Configuration和Bean利用配置类通过自动读取数据配置然后通过这些数据配置项生成对应的对象完全摆脱对XML配置的依赖。这个可以用于Spirng和Spring Boot也是项目中常见的配置类生成姿势。

相关推荐

【Spring Boot系列3】自动化配置详解
【Spring Boot系列3】自动化配置详解

主要讲解SpringBoot自动化配置原理,结合系列1的内容,可以形成SpringBoot原理知识体系闭环。SpringBoot只是个框架,前期我主要了解该框架内部的执行原理,然后掌握SpringBoot的基本使用姿势,就达到我的初步目标&#xff… · 2026/9/24 17:31:30

【MySql系列1】数值类型长度问题
【MySql系列1】数值类型长度问题

你知道tinyint(1)、tinyint(11)、int(1)和int(5)的区别么?不懂?那你就要好好看看这篇文章了。前言讨论DB字段的创建时,有个字段只存储整型状态值,因为状态值只能取值0和1,所以我用的是tinyint(1),然后荣哥说… · 2026/9/24 17:31:30

【MySql系列2】一文带你搞懂MySql的各种锁
【MySql系列2】一文带你搞懂MySql的各种锁

内容包括共享锁S、排它锁X、意向共享锁IS、意向排它锁IX、行锁、间隙锁Gap Lock、Next-Key锁、插入意向锁。以后面试官再问你MySQL的锁,不要只会回答悲观锁和乐观锁了,感觉太Low!!!前言上周五值班时遇到一个很诡异的线… · 2026/9/24 17:31:30

乳腺细胞癌症分割数据集实战:50张图跑通医学图像分割全流程
乳腺细胞癌症分割数据集实战:50张图跑通医学图像分割全流程

简介:本资源面向医学图像分割方向的初学者与算法实践者,提供一套乳腺细胞癌症分割的二分类数据集,可用于训练与验证语义分割网络,帮助解决医学影像中病灶区域自动提取的入门实验需求。压缩包共103个文件,以png图像为主… · 2026/9/24 18:08:02

西瓜书习题代码实战:KMeans、AdaBoost与SVM参数调优及避坑指南
西瓜书习题代码实战:KMeans、AdaBoost与SVM参数调优及避坑指南

简介:这份资源是周志华《机器学习》(西瓜书)课程习题的代码实现合集,面向正在学习机器学习基础理论、需要动手完成课后作业的高校学生与自学者。内容按章节组织,覆盖线性模型、决策树、神经网络、支持向量机、贝叶斯分… · 2026/9/24 18:08:02

医疗影像多任务无监督自适应:从ResNet50到专家门控的落地实践
医疗影像多任务无监督自适应:从ResNet50到专家门控的落地实践

简介:面向医疗图像分析的多任务学习无监督自适应模型源码项目,将ExpertNet的专家模块与Resnet50的残差结构结合,适用于深度学习开发者、医疗影像AI研究者和学生,用于解决标注样本稀少时的疾病特征提取与多任务协同识别问题。压缩包… · 2026/9/24 18:08:02

老照片修复项目实战:从环境配置到模型微调全指南
老照片修复项目实战:从环境配置到模型微调全指南

简介:这是一套基于深度学习的老照片修复项目工程包,面向具备Python基础、希望入门或进阶计算机视觉的开发者。整体共81个文件,包含54个Python脚本,覆盖数据预处理、模型训练、测试及人脸检测对齐等完整链路;17张图片用… · 2026/9/24 18:08:02

PTP高精度时间同步协议CS模式测试代码:从授时原理到可复现验证
PTP高精度时间同步协议CS模式测试代码:从授时原理到可复现验证

简介:这是一份面向网络开发与嵌入式工程师的PTP高精度时间同步协议CS模式测试代码,聚焦客户端-服务器主从架构下的时间同步实现,适用于电力系统、通信网络、视频广播等对时间精度要求严格的场景。资源包共2个文件,包含1个cpp源文件… · 2026/9/24 18:08:02

基于改进YOLOv7的电动车头盔佩戴检测系统实战指南
基于改进YOLOv7的电动车头盔佩戴检测系统实战指南

简介:一套基于改进YOLOv7的电动车头盔佩戴检测系统源码,面向计算机、人工智能等专业的学生及开发者,可满足毕业设计、课程设计或项目实战需求。项目针对电动车骑行安全场景,在标准YOLOv7基础上引入Reversible-Column-Networks改进… · 2026/9/24 18:07:43

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13

1D-CNN时间序列建模实战:从Conv1d原理到工业落地
1D-CNN时间序列建模实战:从Conv1d原理到工业落地

简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26

柔软的L:汉语语流中被忽视的舌肌张力控制
柔软的L:汉语语流中被忽视的舌肌张力控制

1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码