SpringBoot 如何读取配置文件?看完十分钟就够了

十分钟快速上手Spring Boot与微信小程序API接口的调用,快速开发小程序后端服务 微信小程序作为一种轻量级的应用形式,得到了越来越广泛的应用。在实际开发中,我们可能需要在微信小程序和后端服务器之间进行数据交互,以实现复杂的业务逻辑。本文将介绍如何使用Spring Boot框架与微信小程序API接口进行调用,实现跨平台业务逻辑处理的功能。 阅读详情

很多时候我们需要将一些常用的配置信息比如阿里云 oss 配置、发送短信的相关信息配置等等放到配置文件中。

下面我们来看一下 Spring 为我们提供了哪些方式帮助我们从配置文件中读取这些配置信息。

application.yml内容如下:

wuhan2020: 2020年初武汉爆发了新型冠状病毒,疫情严重,但是,我相信一切都会过去!武汉加油!中国加油!

my-profile:
  name: Guide哥
  email: koushuangbwcx@163.com

library:
  location: 湖北武汉加油中国加油
  books:
    - name: 天才基本法
      description: 二十二岁的林朝夕在父亲确诊阿尔茨海默病这天,得知自己暗恋多年的校园男神裴之即将出国深造的消息——对方考取的学校,恰是父亲当年为她放弃的那所。
    - name: 时间的秩序
      description: 为什么我们记得过去,而非未来?时间“流逝”意味着什么?是我们存在于时间之内,还是时间存在于我们之中?卡洛·罗韦利用诗意的文字,邀请我们思考这一亘古难题——时间的本质。
    - name: 了不起的我
      description: 如何养成一个新习惯?如何让心智变得更成熟?如何拥有高质量的关系? 如何走出人生的艰难时刻?

1.通过@value读取比较简单的配置信息

使用@Value("${property}")读取比较简单的配置信息:

@Value("${wuhan2020}")
String wuhan2020;

“

需要注意的是@value这种方式是不被推荐的,Spring 比较建议的是下面几种读取配置信息的方式。

”

2.通过@ConfigurationProperties读取并与 bean 绑定

“

LibraryProperties类上加了@Component注解,我们可以像使用普通 bean 一样将其注入到类中使用。

”

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
@ConfigurationProperties(prefix = "library")
@Setter
@Getter
@ToString
class LibraryProperties {
    private String location;
    private List<Book> books;

    @Setter
    @Getter
    @ToString
    static class Book {
        String name;
        String description;
    }
}

这个时候你就可以像使用普通 bean 一样,将其注入到类中使用:

package cn.javaguide.readconfigproperties;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author shuang.kou
 */
@SpringBootApplication
public class ReadConfigPropertiesApplication implements InitializingBean {

    private final LibraryProperties library;

    public ReadConfigPropertiesApplication(LibraryProperties library) {
        this.library = library;
    }

    public static void main(String[] args) {
        SpringApplication.run(ReadConfigPropertiesApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() {
        System.out.println(library.getLocation());
        System.out.println(library.getBooks());    }
}

控制台输出:

湖北武汉加油中国加油
[LibraryProperties.Book(name=天才基本法, description........]

3.通过@ConfigurationProperties读取并校验

我们先将application.yml修改为如下内容,明显看出这不是一个正确的 email 格式:

my-profile:
  name: Guide哥
  email: koushuangbwcx@

“

ProfileProperties类没有加@Component注解。我们在我们要使用ProfileProperties的地方使用@EnableConfigurationProperties注册我们的配置 bean:

”

import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotEmpty;

/**
* @author shuang.kou
*/
@Getter
@Setter
@ToString
@ConfigurationProperties("my-profile")
@Validated
public class ProfileProperties {
   @NotEmpty
   private String name;

   @Email
   @NotEmpty
   private String email;

   //配置文件中没有读取到的话就用默认值
   private Boolean handsome = Boolean.TRUE;

}

具体使用:

package cn.javaguide.readconfigproperties;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;

/**
 * @author shuang.kou
 */
@SpringBootApplication
@EnableConfigurationProperties(ProfileProperties.class)
public class ReadConfigPropertiesApplication implements InitializingBean {
    private final ProfileProperties profileProperties;

    public ReadConfigPropertiesApplication(ProfileProperties profileProperties) {
        this.profileProperties = profileProperties;
    }

    public static void main(String[] args) {
        SpringApplication.run(ReadConfigPropertiesApplication.class, args);
    }

    @Override
    public void afterPropertiesSet() {
        System.out.println(profileProperties.toString());
    }
}

因为我们的邮箱格式不正确,所以程序运行的时候就报错,根本运行不起来,保证了数据类型的安全性:

Binding to target org.springframework.boot.context.properties.bind.BindException: Failed to bind properties under 'my-profile' to cn.javaguide.readconfigproperties.ProfileProperties failed:

    Property: my-profile.email
    Value: koushuangbwcx@
    Origin: class path resource [application.yml]:5:10
    Reason: must be a well-formed email address

我们把邮箱测试改为正确的之后再运行,控制台就能成功打印出读取到的信息:

ProfileProperties(name=Guide哥, email=koushuangbwcx@163.com, handsome=true)

4.@PropertySource读取指定 properties 文件

import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;

@Component
@PropertySource("classpath:website.properties")
@Getter
@Setter
class WebSite {
    @Value("${url}")
    private String url;
}

使用:

@Autowired
private WebSite webSite;

System.out.println(webSite.getUrl());//https://javaguide.cn/

5.题外话:Spring 加载配置文件的优先级

Spring 读取配置文件也是有优先级的,直接上图:

SpringBoot 如何读取配置文件?十分钟就够了

 


最后记得点赞+关注+转发哦。谢谢支持,需要更多相关资料的可以私信“学习”免费获取。

千万不要把文章放在收藏夹吃灰哦。

招聘数据分析全流程:Hadoop+爬虫+SpringBoot实现 大数据分析正在成为企业决策和人才市场洞察的核心能力,而数据采集、分布式存储与离线计算则是构建数据价值链条的基础。爬虫技术用于高效获取海量半结构化数据,Hadoop生态提供高容错的分布式存储与并行计算能力,通过MapReduce完成数据清洗、去重和特征提取,再结合SpringBoot构建Web服务,将分析结果以可视化方式呈现。这类技术组合广泛应用于招聘信息挖掘、行业薪资分析、技能需求图谱构建等场景,尤其适合需要处理多源异构数据的工程实践。本文基于招聘网站真实数据,完整拆解从爬虫采集、HDFS存储、MapRed 阅读详情

相关推荐

Vue+SpringBoot个人博客实战复盘:从选型到部署的完整指南

前后端分离架构已成为现代Web开发的主流模式,其中Vue与SpringBoot的组合因其渐进式前端和约定优于配置的后端特性,被广泛应用于实战项目。理解其核心原理,如响应式数据绑定、JWT无状态认证、跨域代理机制,是构建稳定应用的基础。这类技术栈能够高效支撑内容管理、权限校验、文件上传等典型场景。然而在真实开发中,开发者常遇到“springboot版本太高”导致JDK不匹配、“the project can not found node_modules”等环境问题,或对“vue computed”缓存特性、D

weixin_34253126的博客 355

当HTTP状态代码不足时:处理Web API错误报告

RESTful Web API设计的一个领域(经常被忽视)是如何报告与业务或应用程序有关的错误和问题。 首先要想到HTTP状态代码的正确用法,尽管它非常方便,但通常它的信息量还不够。 让我们以400错误请求为例。 是的,它清楚地表明请求是有问题的,但是究竟出了什么问题呢? RESTful的体系结构风格并不决定在这种情况下应该做什么,因此每个人都在发明自己的风格,约定和规范。 它可能像将错...

最佳 Java 编程 654

Qt开发中彻底解决中文乱码问题

中文乱码问题主要源于编码不一致需要同时设置控制台和Qt应用程序的编码确保项目文件和环境配置的编码一致文件操作时注意指定正确的编码。

qq_53832058的博客 3406

【Spring源码分析】40-Spring Validation参数校验的使用与原理

1、什么是Bean Validation JSR-303(JSR是Java Specification Requests的缩写,意思是Java 规范提案) 是JAVA EE 6 中的一项子规范,叫做Bean Validation,Hibernate Validator 是 Bean Validation 的参考实现。Hibernate Validator 提供了 JSR 303 规范中所有内置 ...

通往神秘的道路的专栏 7907

Delta并联机械手-Codesys实现以及正解逆解研究

由于Codesys的Robotics模块有Delta并联机械手的运动模型,因此借助Codesys的机械手运动模型,研究自己的正解逆解算法。

weixin_42386991的博客 5567

uniapp 使用摄像头 live-pusher (APP)

uniapp 中开发 app 时使用live-pusher踩过的坑

随身笔记 1万+

Spring Boot 之 @ConfigurationProperties

@ConfigurationProperties 使用方式有两种  1、在类上使用该注解  2、在工厂方法上使用该注解 (@bean) @Target({ElementType.TYPE, ElementType.METHOD}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface ConfigurationProp...

ywb201314的专栏 398

中移物联ML307C模组OPENCPU开发环境搭建全攻略

本文详细介绍了中移物联ML307C模组OPENCPU开发环境搭建的全过程。从OPENCPU模式的核心优势解析,到SDK获取、Python与scons工具安装,再到解读SDK目录结构与实战编译命令,最后提供常见问题避坑指南,帮助开发者快速构建高效的物联网应用编译环境。

weixin_29168393的博客 748

SpringBoot读取配置文件的六种方式

SpringBoot读取(外部)全局默认配置文件的方式

weixin_50117748的博客 1万+

Python与网络爬虫案例:电影评论抓取

接下来,我们就可以通过分析该页面中的HTML代码,来确定需要抓取的内容。在这段代码中,我们首先对每个评论div元素进行for循环,然后通过find方法获取class为'title'、'text'、'rating-other-user-rating'的元素,并将结果分别赋值给title、content和rating变量。在这段代码中,我们首先定义了目标网站的URL和headers信息,然后通过requests.get方法向目标网站发送了一个GET请求,并将返回的响应赋值给了response变量。

吃不胖. 1264

宇瞳杯视讯镜头完成版(除公差/鬼像分析)

宇瞳杯视讯镜头完成版(除公差/鬼像分析)

weixin_72050316的博客 1050

Springboot支付宝沙箱支付(完整详细步骤)

两种方式进行配置。这里我采取的是默认方式: 开发者如需使用系统默认密钥/证书,可在开发信息中选择系统默认密钥。注意:使用API在线调试工具调试OpenAPI必须使用系统默认密钥。

沁禹的博客 2113

基于 51 单片机的智能手势控制小车设计与实现

智能手势控制小车以STC89C52RC 单片机为控制核心,通过手势识别模块采集用户手势指令,经单片机处理后驱动电机执行前进、后退、左转、右转等动作。该项目融合了传感器技术、单片机编程和电机驱动技术,具有成本低、易实现、互动性强的特点,适合作为嵌入式系统入门实践案例。本项目成功实现了基于 51 单片机的智能手势控制小车,通过 APDS-9960 模块采集手势信号,经单片机处理后驱动电机完成基本动作,验证了 “传感器 + 单片机 + 执行器” 的嵌入式系统设计思路。

weixin_42300449的博客 180

SpringBoot入门

SpringBoot入门 文章目录SpringBoot入门SpringBoot简介使用IDEA快速搭建SpringBoot项目更换Maven源介绍配置文件自定义Banner打JAR包参考文章 SpringBoot简介 了解 SpringBoot之前,我们要先了解一下Spring。Spring是一个开源框架,2003年兴起的一个轻量级的 Java开发框架。Spring是为了解决企业级应用开发的复杂性而创建的,能够简化开发。 为了降低 Java开发的复杂性,Spring采用了4种关键策略: 基于 POJO的轻

qq_42582489的博客 1203

OpenClaw实战系列04:Jira/Confluence深度集成实战指南

汇总 Confluence 空间 TEAM 下所有关于“性能优化”的文档,输出要点自然语言创建和查询 Jira 任务,无需离开聊天工具基于 Confluence 的私有知识库问答,让 AI 真正理解团队文档Jira 与 Confluence 联动,打通项目管理与知识管理定时同步与通知,自动化团队信息流转至此,你的 OpenClaw AI 助理已经不仅是一个聊天机器人,而是真正融入团队工作流的“智能项目管理助手”。下一期我们将带来OpenClaw 自定义技能开发实战。

PeterPan的博客 574

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

springboot中定时任务简单版

springboot中定时任务简单版遇到了一个问题(@Scheduled定时任务不生效???)一,添加@EnableScheduling注解到入口类声明上面二,创建类,添加@Component注解三,创建方法,添加@Scheduled注解从配置文件中读取定时的时间看似简单,却隐藏着很多坑,一不小心就掉进去了,比如: 遇到了一个问题(@Scheduled定时任务不生效???) 定时任务可以有很多的写法,下面这个方法我觉的最简单,如果你的项目用的是spring boot框架,就可以三步完成: 一,添加@Enab

weixin_44424114的博客 218

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

springBoot踩坑日记:修改了jar包内的yml文件配置参数,但是日志打印一直还是之前的配置信息

springBoot踩坑日记:修改了jar包内的yml文件配置参数,但是日志打印一直还是之前的配置信息 这是一个真实的故事且有故事点长!读了之后就知道作者有多蠢了!!!! 在一个漆黑的夜晚,同事在部署服务环境,然后发生了一个不可思议的问题!!! 这个问题发生在部署客户的专网环境上,专网环境(Win7)由于不能直接连接不了公网,所以需要将专网采集的数据定时推送到公网的FTP中,于是在yml配置文件中需要配置FTP的ip,port端口,账号密码等配置参数。 同事写了一个接口,将之前没上传的文件重新上传到公网的F

yunnuo的博客 1281

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Springboot支付宝沙箱支付---完整详细步骤

两种方式进行配置。这里我采取的是默认方式: 开发者如需使用系统默认密钥/证书,可在开发信息中选择系统默认密钥。注意:使用API在线调试工具调试OpenAPI必须使用系统默认密钥。

qq_43842093的博客 1366

SpringBoot 整合ehcache 3.x

SpringBoot 整合ehcache 3.x

Amarone'blog 2496

发现一款更轻量级的权限框架,十分钟就能快速上手,yyds

作为一名后台开发人员,权限这个名词应该算是特别熟悉的了。就算是java里的类也有 public、private 等“权限”之分。之前项目里一直使用shiro作为权限管理的框架。说实话,shiro的确挺强大的,但是它也有很多不好的地方。shiro默认的登录地址还是login.jsp,前后端分离模式使用shiro还要重写好多类;手机端存储用户信息、保持登录状态等等,对shiro来说也是一个难题。在分布式项目里,比如电商项目,其实不太需要明确的权限划分,说白了,我认为没必要做太麻烦的权限管理,一切从简。

z1ztai的博客 145

你说啥?十分钟带我了解Spring Data 教程 - Redis篇

前言 1. Redis简介 Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库,并提供多种语言的API。Redis 是一个高性能的key-value数据库。 redis的出现,在部分场合可以对关系数据库起到很好的补充作用。它提供了Java,C/C++,C#,PHP,JavaScript,Perl,Object-C,Python,Ruby,Erlang等客户端,使用很方便。

WANXT1024的博客 291

SpringBoot 集成支付宝支付功能

通过AlipayClient执行request调用SDK生成表单,用HttpServletResponse(浏览器响应的一个流)写表单的内容,创建一个html的网页)--------------------------->执行请求,拿到响应的结果,返回给浏览器。创建 AlipayTradePagePayRequest,设置Request参数(参数包含支付宝回调的订单流水号、总金额、我的订单编号)(格式:JSON格式)---------------------------->创建 Request,设置参数。

youyangrensheng的博客 1337

Java -- 定时任务

spring Boot: 在service.java类中使用注解 @Component:扫描组件 ,用于标注这个类让进容器,能扫描到这个类 定时任务的注解:@Scheduled(cron = "") 写在在所需的方法上方 第一种写法: 例:@Scheduled(cron = "0 */10 * * * ?"):每十分钟执行一次 第二种写法: @Scheduled(cron = "${jobs.outTimeOrderTask.cron}") ${jobs.outTimeOr

m0_57085190的博客 798

Springboot开源项目github整理

项目一:支付服务 简介:支付服务:支付宝、微信、银联详细 代码案例,目前已经1800+Star。十分钟让你快速搭建一个支付服务,内附各种教程。 项目地址:https://gitee.com/52itstyle/spring-boot-pay 项目二:秒杀案例 秒杀 简介:从0到1构建分布式秒杀系统,脱离案例讲架构都是耍流氓,码云GVP项目。这个是自5月以来最上心的一个项...

洛阳城下逢公子 587

从零搭建SpringBoot项目时容易忽略的五个配置

很多人从 IDE 里直接运行项目,一切正常,可一旦打好 jar 包部署到 Linux 服务器,程序中的中文注释变成乱码,返回给前端的文案变成问号。尽早把编码、时区、线程池、连接池和安全端点纳入你的项目模板,下一次从零搭建时,你就能把时间真正花在业务上,而不是事故上。(毫秒),一旦某段代码持有连接超过 5 秒,HikariCP 就会在日志中打印出获取连接时的堆栈,直接指向你泄漏的那个位置。HikariCP 是 Spring Boot 默认的连接池,它的默认配置确实很优秀,但优秀不代表适合你的场景。

qq_35974860的博客 11
上一篇: 在 Spring/Spring Boot 中做参数校验?只看这一篇就够了
下一篇: 程序员必备,这份电子文档获取后精通,涨薪就跟玩一样。
Java斗帝之路
博客等级 码龄7年 2392粉丝 687原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值