Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!

在项目开发中经常会用到配置文件,之前介绍过Spring Boot 资源文件属性配置的方法,但是很多朋友反馈说介绍的不够详细全面。所以, 今天完整的分享Spring Boot读取配置文件的几种方式!

Spring Boot 支持多种格式的配置文件格式,目前最常用的配置文件格式是 properties和 yml。所以,这里默认是用.properties文件,其实,yml格式文件的用法也基本类似。Spring Boot 最常用的几种读取配置文件的方法:分别是@Value注解,@ConfigurationProperties注解和Environment接口。这三种注解可以配合着@PropertySource来使用。

使用@Value注解,默认读取的是application.properties。如果是自定义的配置文件,则需要用 @PropertySource 来指定具体要读取的配置文件。

1、application.properties 配置文件增加如下配置

2、读取配置

代码说明:

1、@Value 为读取配置的注解。需要配置完整的key路径。

2、@Value 默认读取application.properties 文件,如果需要自定义配置文件,需要通过@PropertySource 指定。

上面的代码,可以把@Value 的相关代码封装到单独的类中,在该类增加@Component注解,然后读取配置文件。然后在调用的类中注入该类即可。

Environment的使用非常方便,只要在使用的类中注入Environment,就能很方便就读取到相应的配置。

代码说明:

1、使用Environment无需指定配置文件,获取的是系统加载的全部配置文件中的配置。

2、注意配置文件的编码格式。

在实际项目中,当项目需要注入的变量值很多时,上述所述的@value 和 Environment 两种方法会比较繁琐,这时候我们通常使用基于类型安全的配置方式,将properties属性和一个Bean关联在一起,即使用注解@ConfigurationProperties读取配置文件数据。

1、增加自定义配置文件

在src\main\resources下新建website.properties配置文件:

2、增加自定义配置对象类

首先创建WebSiteProperties 自定义配置对象类。然后,使用@ConfigurationProperties 注解将配置文件属性注入到自定义配置对象类中

代码说明:

1、@ConfigurationProperties(prefix = “com.weiz.resource”) 绑定属性,其中prefix表示所绑定的属性的前缀。

2、@PropertySource(value = “classpath:website.properties”) 指定读取的配置文件及其路径。

通过上面的WebSiteProperties类,即可读取全部对应的配置项。

3、使用配置

上面的代码可以看到,使用非常简单,只需将之前定义的WebSiteProperties 配置类注入即可。

四、经验与坑

在实际项目中,会碰到很多读取配置文件的业务场景,需要注意各种坑,否则会让你很惆怅。

1、yml 文件注意空格和格式缩进。

2、properties文件默认使用的是iso8859-1。容易出现乱码问题,如果有中文,如要指定编码格式。

3、系统中 yml文件的加载顺序高于properties,但是读取配置信息的时候会读取后加载。

4、@PropertySource注解默认只会加载 properties文件,yml 文件这不需要此注解。

5、@PropertySource注解可以与任何一种方式联合使用。

6、简单值推荐使用@Value,复杂对象推荐使用@ConfigurationProperties。

以上,就把Spring Boot如何资源文件属性配置介绍完了。

这个系列课程的完整源码,也会提供给大家。大家关注我的微信公众号(架构师精进),回复:springboot源码 ,获取这个系列课程的完整源码。

Original: https://www.cnblogs.com/zhangweizhong/p/13285986.html
Author: 章为忠
Title: Spring Boot 入门系列(二十五)读取配置文件的几种方式详解!

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/540437/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Nginx虚拟目录alias和root目录

    nginx是通过alias设置虚拟目录,在nginx的配置中,alias目录和root目录是有区别的: 1.示例一 location /huan/ { alias /home/ww…

    Java 2023年5月30日
    073
  • HashMap原理

    Java7 : 数组 + 链表 Java8: 数组 + 链表 + 红黑树 (链表超过8则转为红黑树,小于6则变会链表) >> 加快查询. 源码如下: 参数解释: DEF…

    Java 2023年6月8日
    063
  • JWT(JSON Web Token)的简单介绍及demo

    Original: https://www.cnblogs.com/qishanmozi/p/9761557.htmlAuthor: 祁山墨子Title: JWT(JSON Web…

    Java 2023年6月13日
    081
  • 某CTF比赛writeup

    看到群里别人参加比赛发上来的附件,自己尝试解了一下。 1、提示RSA,提供flag.enc和pub.key附件 一看就是解RSA,公钥分解得到n和e n=8693448229604…

    Java 2023年6月5日
    098
  • linux基本命令

    cd 切换文件夹 cd /home 绝对路径 以包目录开头 cd admin 相对路径 不以包目录开头 cd .. 返回上级目录 cd ~ 到自己的家目录 /home/admin …

    Java 2023年6月16日
    081
  • 6、spring注解+springMVC注解+Mybatis注解+log4j+idea+maven

    1、项目结构如下 2、编辑pom.xml文件配置依赖 1 <?xml version="1.0" encoding="UTF-8"?&…

    Java 2023年6月13日
    093
  • 代码上传Github后乱码解决方案

    阅文时长 | 0.23分钟字数统计 | 384字符主要内容 | 1、引言&背景 2、解决方案 3、声明与参考资料『代码上传Github后乱码解决方案』 编写人 | SCsc…

    Java 2023年6月5日
    092
  • MongoDB排序时内存大小限制和创建索引的注意事项!

    线上服务的MongoDB中有一个很大的表,我查询时使用了 sort()根据某个字段进行排序,结果报了下面这个错误: [Error] Executor error during fi…

    Java 2023年6月5日
    079
  • Javaweb07-三层架构(BaseDao)

    1、BaseDao 持久层业务接口实现类的公共父类,定义了jdbc操作数据库的所有公共方法,方便子类继承; import java.io.InputStream; import j…

    Java 2023年6月15日
    084
  • Java中HashMap和TreeMap的区别

    什么是Map集合在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value.这就是我们平时说的键值对…

    Java 2023年5月29日
    072
  • 详细分析Java中断机制-转载

    引言 当我们点击某个杀毒软件的取消按钮来停止查杀病毒时,当我们在控制台敲入quit命令以结束某个后台服务时……都需要通过一个线程去取消另一个线程正在执行的任…

    Java 2023年5月29日
    066
  • 低版本spring-cloud-sleuth的TraceableExecutorService一个坑,注意绕行

    我们知道Java 线程池提交任务有两种: 1,submit 会抛出异常,会有异常日志 2,execute 没有抛出异常,需要执行返回值Future的get方法触发抛出异常 exec…

    Java 2023年6月14日
    0110
  • fastposter v2.8.3 发布 电商海报生成器

    fastposter v2.8.3 发布 电商海报生成器 🔥🔥🔥 fastposter海报生成器,电商海报编辑器,电商海报设计器,fast快速生成海报 海报制作 海报开发。贰维🐴海…

    Java 2023年6月5日
    076
  • 简述一条查询语句的执行过程

    大体来说,MySQL 可以分为 Server 层和 存储引擎层两部分。 Server 层包括连接器、查询缓存、分析器、优化器、执行器等 存储引擎层负责数据的存储和提取。 一个查询语…

    Java 2023年6月5日
    082
  • Java 确定两个区间范围是否有交集

    java;gutter:true; @Test public void test01() {</p> <pre><code> Double[] …

    Java 2023年5月29日
    085
  • springboot系列十二、springboot集成RestTemplate及常见用法

    一、背景介绍 在微服务都是以HTTP接口的形式暴露自身服务的,因此在调用远程服务时就必须使用HTTP客户端。我们可以使用JDK原生的 URLConnection、Apache的 H…

    Java 2023年5月30日
    089
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球