[版权申明] 非商业目的注明出处可自由转载
博文地址:https://blog.csdn.net/ShuSheng0007/article/details/117002443
出自:shusheng007

文章目录

  • 概述
  • 配置文件类型
  • 读取配置文件的三种方式
    • 使用@Value
    • 使用Environment
    • 使用@ConfigurationProperties
  • 总结

概述

最近工作的重心逐渐由移动开发转到后端了,由于日常主要精力在移动开发上,以至于对后端的很多知识都停留在理论层面上,实践比较少,一旦动手才发现有点眼高手低。于是我将自己学习的过程记录下来,不然过几天就忘了,一来可以作为自己的学习笔记,二来也能帮助待见我的那些程序猿小伙伴们…

由于SpringBoot注解满天飘,所以对于初学者还是比较懵逼的,因为要是你不从根本上理解Spring的原理,就会觉得这玩意很神奇:为啥加个这样的注解就起作用了呢?到此就是程序员二八分界线了,进一步研究的同学升二,满足于当前状态者落八。

今天我们主要总结一下SpringBoot如何读取配置文件的问题。

配置文件类型

SpringBoot 支持两种格式的配置文件,这个相信大家都已经烂熟于心了,这两种格式的文件除了格式上不同,使用上几乎没有差别,喜欢哪种就用哪种吧

下面是同一内容的两种格式,可以感受一下:

  • Property文件
database.username=ss007
database.password=wb123
database.server.ip=192.168.1.1
database.server.port=8000
  • Yml文件
database:username: ss007password: wb123server:ip: 192.168.1.1port:8000

读取配置文件的三种方式

当我们新建一个SpringBoot的Maven项目时,默认会在src/main/resources路径下生成一个application.properties空配置文件。系统默认就能找到这个文件,神奇吧?因为springboot使用了约定大于配置的思想,很多配置都按照约定配置好了。

那我们如何读取这些配置文件的内容呢?此处总结了三种方式。

使用@Value

@Value("${配置文件中某个键值对的key}")注解添加到你要接收值的字段上即可,如下所示:

@Repository
public class UserModel {@Value("${database.username}")private String userName;//不需要setter
}

@Repository 是一种@Component,通过它Spring就扫描到这个类,然后帮助我们生成UserModel的实例对象了

使用Environment

使用Environment对象,这个对象里面有很多获取值的方法,这种方法用的较少。

@Repository
public class UserModel {        //使用setter的方式注入Enviroment对象private Environment environment;   @Autowiredpublic void setEnvironment(Environment environment) {this.environment = environment;}//通过environment对象获取值public String getUserNameByEnv(){return environment.getProperty("database.username");}
}

使用@ConfigurationProperties

重点是这种方法,既灵活又迷惑。其思想是将配置文件中相关的一组配置映射为一个POJO(plain old java object),更准确的说是映射为一个JavaBean。然后我们就可以通过这个JavaBean来使用配置文件里的值了。

不同版本这个注解的使用方式有一些不同,本文使用的是SpringBoot2.4.5。

  1. 第一步:识别配置文件中那些相关属性组。

例如此例是一组database相关的配置,其下面还有一个子组server。

database.username=ss007
database.password=wb123
database.server.ip=192.168.1.1
database.server.port=8000
  1. 第二步:按照配置文件的结构和命名构建Java类

这里有几个注意点:

  • 字段的命名

Java类字段命名不需要与配置文件完全一样,但也不能随意命名,要符合一定的规则:

例如配置文件中为:username, Java类自动名称可以为:UserName/Username/userName/username/User-Name/user-name等等,但是在Java中一般使用小驼峰格式:userName

  • 内部嵌套类

当配置文件中的属性结构存在层级时,就需要使用嵌套类。例如此处的server。

  • Setter千万不可省略

因为SpringBoot使用setter来将配置文件的值赋值到JavaBean里面的,所以不可省略,否则赋值将失败。

下面的代码为上面属性配置的隐射

public class DatabaseConfig {/*** 数据库用户名*/private String userName;/*** 数据库密码*/private String passWord;/*** 数据库服务器*/private Server server;public void setUserName(String userName) {this.userName = userName;}public void setPassWord(String passWord) {this.passWord = passWord;}public void setServer(Server server) {this.server = server;}...省略了getterpublic static class Server{/*** 服务器IP*/private String ip;/*** 服务器端口号*/private int port;public void setIp(String ip) {this.ip = ip;}public void setPort(int port) {this.port = port;}...省略了getter}
}
  1. 第三步:使用@ConfigurationProperties(prefix=“配置属性组名”)注解标记

其中prefix为属性配置文件中那组配置的最外层,此处为database

  1. 第四步:让Spring感知到你这个配置类的存在

完成以上三步后,我们需要让Spring感知到这个类,那样当我们使用的时候,它才能帮我们注入实例。

这里又存在3中方式:

第一种方式:使用@Configuration注解标记你的配置类,此处为DatabaseConfig

第二种方式:使用@ConfigurationPropertiesScan()注解标记你的程序启动类xxxApplication,此处为SpringLearnApplication。

第三种方式:使用@EnableConfigurationProperties({你的配置类.class}) 注解标记你的程序启动类xxxApplication,此处为SpringLearnApplication。

三种方式使用任何一种都可,其中第二种方式最为便捷,相当于SpringBoot自动扫描那些使用@ConfigurationProperties标记的类。

最后的样子为

@Configuration //当使用`@ConfigurationPropertiesScan()`或`@EnableConfigurationProperties({你的配置类.class})` 时,此注解可省略
@ConfigurationProperties(prefix="database")
public class DatabaseConfig {...
}

当想要使用配置文件中的值时,注入DatabaseConfig实例,然后使用其值即可。

总结

三种方式中第三种应该是使用最多的,也最为复杂,你学会了吗?其功能远不止如此,我们下篇接着聊。

最后来个调查吧,你喜欢哪种格式的配置文件?properties 或者yml

文章最后有源码,觉得可以记得star。

GitHub源码: springboot-learn

SpringBoot如何读取配置文件(@Value/@ConfigurationProperties/Environment)相关推荐

  1. Wagon部署springboot项目读取配置文件错误问题

    wagon(瓦工)插件是一个很不错的轻量级,快速部署项目到服务器的插件,针对用中小项目,使用起来十分方便.今天跟大家分享一下自己在使用过程中遇到的一个坑,持续两天时间都没能够解决,最终在多方求助下找到 ...

  2. boot idea无法识别spring_intellij idea springboot无法读取配置文件的解决方法

    问题分析及解决方案 问题原因: Mybatis没有找到合适的加载类,其实是大部分spring - datasource - url没有加载成功,分析原因如下所示. DataSourceAutoConf ...

  3. 读取文档时出现问题129_springboot读取配置文件的自定义内容时出现中文乱码

    学习springboot时读取配置文件自定义内容出现中文乱码总结. 方法一: Windowd→Preferences→General→Editors→Text Editors→Spelling里面的E ...

  4. SpringBoot 读取配置文件中参数全面教程

    一.简介 在日常开发使用 SpringBoot 框架时,经常有一些配置信息需要放置到配置文件中,我们需要手动读取这些配置到应用中进行一些逻辑,这里整理了一些常用读取配置的方法,简单介绍一下. 1.Sp ...

  5. @PropertySource与@ConfigurationProperties多种方式读取配置文件详解,附带@PropertySources使用说明

    两个注解都可以读取properties文件或者xml文件,二者可以单独使用也可以结合使用. 一. @PropertySource结合@Value读取指定配置文件 1.准备一个properties文件放 ...

  6. Spring-boot中读取config配置文件的两种方式

    了解过spring-Boot这个技术的,应该知道Spring-Boot的核心配置文件application.properties,当然也可以通过注解自定义配置文件的信息. Spring-Boot读取配 ...

  7. springboot读取配置文件的三种方式

    项目中springboot读取配置文件的三种方式: 1.使用Environment 2.使用@Value 3.使用@ConfigurationProperties注解映射到bean中,定义一个User ...

  8. Springboot中,如何读取配置文件中的属性

    摘要:在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在springboot的项目中,我们应 ...

  9. 在springboot中,如何读取配置文件中的属性

    摘要:在比较大型的项目的开发中,比较经常修改的属性我们一般都是不会在代码里面写死的,而是将其定义在配置文件中,之后如果修改的话,我们可以直接去配置文件中修改,那么在springboot的项目中,我们应 ...

最新文章

  1. jquery和原生js-ajax
  2. 图片太多加载过慢?学学图片懒加载吧
  3. python中当地时间_R 与 Python 中与时间相关内容的梳理
  4. 2014腾讯实习生招聘软件开发类附加题
  5. [原]详解如何将cocos2dx项目编译到Android平台上的(方式一:Cywin+NDK)
  6. Flink算子(ProcessFunction,map和Flatmap)
  7. python读音有道-centos7安装有道词典(不能发音和取词)
  8. python end用法_8种高级的Python列表使用技巧,都给你整理好啦(附实操代码)
  9. MapReduce+MapReduce执行过程(四)
  10. iOS底层探索之类的结构—cache分析(下)
  11. js highcharts拆线图
  12. Python库下载第三方镜像(清华/豆瓣)
  13. 推动区块链基础设施建设,先要破解区块链发展“三高”难题
  14. Windows 10 安装 IIS 管理器
  15. html动态和静态的区别,静态测试和动态测试的区别是什么
  16. 单表(sqlserver不支持)、整库,支持本地和远程备份
  17. 二叉树(知道中序遍历和后序遍历得到先序遍历)
  18. 诛仙一直服务器维护,服务器维护《诛仙3》官方致仙友的一封信
  19. 不等号属于不等式吗_什么是不等式
  20. 图片嵌入隐藏-大容量的信息隐藏算法

热门文章

  1. websocket linux测试,Linux - WebSocket测试错误
  2. SpringBoot集成Redis使用Lettuce
  3. Nexus 6 编译并刷机 Android 7.1.1 AOSP以及常用的修改源码快速验证方法
  4. 移动端网页实现拨打电话功能的几种方法以及点击立刻qq联系
  5. html绝对定位怎么页面居中,css绝对定位如何居中?css绝对定位居中的四种实现方法...
  6. margin对css绝对定位的影响
  7. Windows11打开IE模式提示“找不到Internet Explorer”怎么办
  8. FSM有限状态机-状态图画法
  9. 睿智融科IPO被终止:年营收1.5亿 曾计划募资6亿
  10. php怎么定义浮点型,php:浮点型(float)数据类型实例详解