一般说来,读取 SpringBoot 配置文件的方式大致可以分为三种(见下↓)。更详细的分类包括是否使用自定义配置文件、自定义配置文件的文件类型(.properties还是.yml)以及配置的 key 是否使用"前缀"等等。

  • @Value + [@PropertySource]
  • setXxx() + @ConfigurationProperties + [@PropertySource]
  • environment.getProperty(“xxx”)

多说无益,直接上一个综合的栗子,一切不言自明。

需求场景:

一个接口需要从 application.propertiesdiy.properties 以及 diy.yml
中读取配置给变量赋值(包括给静态变量赋值),然后再进行其它的业务逻辑的操作。

代码目录结构:

package com.demo.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.core.env.Environment;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;@Controller
//@PropertySource("classpath:config/diy.properties")
//@PropertySources({//        @PropertySource("classpath:config/diy.properties"),
//        @PropertySource("classpath:diy.yml")}
//)
@PropertySource(value = {"classpath:config/diy.properties", "classpath:diy.yml"})
@ConfigurationProperties(prefix = "person")
public class TestController {//@Value("${name}")//注意事项:读取 .properties 中的配置时,变量名必须加上前缀,否则运行报错@Value("${person.name}")private String name;private Integer age;public void setAge(Integer age) {this.age = age;}// 静态变量获取配置文件中的配置private static String password;@Value("${person.password}")//注意事项:注意不是使用默认的 setXxx,而是去掉"static"的 setXxx 方法public void setPassword(String password) {TestController.password = password;}@Autowiredpublic Environment environment;//@Value("${person.num}")//注意事项:读取 .yml 中的配置时,变量名不能添加前缀,否则运行报错@Value("${num}")private int num;private int num2;public void setNum2(int num2) {this.num2 = num2;}@RequestMapping("/test")@ResponseBodypublic String test() {System.out.println("name = " + name);System.out.println("age = " + age);System.out.println("password = " + password);System.out.println("num = " + num);System.out.println("num2 = " + num2);// 0,无法设置前缀,导致无法获取到值,结论:形如 person.num2 使用 @Value 获取,不要使用 @setXxx 方式System.out.println("environment.getProperty(\"person.sex\"):" + environment.getProperty("person.sex"));return "springboot 访问成功!";}}

diy.yml

person:num: 2020num2: 2022

application.properties

person.name=from applictionn.properties

diy.properties

person.name=name from diy.properties
person.age=20
person.password=pwd form diy.properties
person.sex=sex form diy.properties

访问 http://localhost:8080/test 测试,运行结果:

  • 控制台输出:
name = from applictionn.properties
age = 20
password = pwd form diy.properties
num = 2020
num2 = 0
environment.getProperty("person.sex"):sex form diy.properties
  • 浏览器:

【小结】

  • 当一个配置在 application.properties 和自定义配置文件中同时存在时,取application.properties。也就是说application.properties 的优先级高于自定义配置文件。

  • 当使用 @Value 读取配置信息时,
    ① 如果读取的是 .properties 文件, @Value("${xxx.xxx}") 必须使用配置中 key全称(即加上"前缀"),且如果是自定义配置文件,还要加上 @PropertySource("classpath:xxx/xxx.properties)指定配置文件位置。
    ② 如果读取的是 .yml 文件, @Value("${xxx}") 使用的配置的 key 需要去掉"前缀"。同样如果是自定义配置文件,也要指定配置文件位置。

  • 使用 @Value 时,如果获取的是 application.properties 中的配置,则不需要在@PropertySource("classpath:xxx/xxx.properties") 设置文件路径。也不需要在 @ConfigurationProperties(prefix = "xxx") 中设置"前缀"(因为 @Value 获取 .properties 中的配置,必须使用配置中 key 的全称)。

  • 大多数情况下,一个类文件中只读取一个配置文件,使用 @PropertySource("classpath:xxx/xxx.properties") 即可。实在需要使用多个配置文件的情况下,使用 @PropertySources({ @PropertySource("classpath:config/diy.properties"), @PropertySource("classpath:diy.yml")} ) 或者 @PropertySource(value = {"classpath:config/diy.properties", "classpath:diy.yml"})

  • 静态变量读取配置信息,需要使用 setXxx,这里尤其要注意使用 public void setXxx(E e)的形式,不要使用编辑器默认生成的 setXxx 方法 – public static void setXxx(E e)形式,否则将无法读取到配置信息。

瞎琢磨先生のJava笔记之读取SpringBoot配置文件的几种方式相关推荐

  1. Java中读取properties配置文件的八种方式总结

    一.前言 在做Java项目开发过程中,涉及到一些数据库服务连接配置.缓存服务器连接配置等,通常情况下我们会将这些不太变动的配置信息存储在以 .properties 结尾的配置文件中.当对应的服务器地址 ...

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

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

  3. Java 读取 .properties 配置文件的几种方式

    Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配 ...

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

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

  5. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

  6. java读取csv文件的两种方式

    java读取csv文件的两种方式 1.CsvReader读取 import com.csvreader.CsvReader; /*** CsvReader 读取* @param filePath* @ ...

  7. java配置文件实现方式_java相关:详解Spring加载Properties配置文件的四种方式

    java相关:详解Spring加载Properties配置文件的四种方式 发布于 2020-4-29| 复制链接 摘记: 一.通过 context:property-placeholder 标签实现配 ...

  8. 快速搭建Springboot项目的两种方式!!

    大家好,我是雄雄,欢迎关注微信公众号[雄雄的小课堂]. 前言 Springboot的特点就是简单.快速和方便,使用idea不到一分钟就可以快速搭建springboot项目,并且,在这里,你不用写spr ...

  9. Spark读取Hive数据的两种方式与保存数据到HDFS

    Spark读取Hive数据的两种方式与保存数据到HDFS Spark读取Hive数据的方式主要有两种 1. 通过访问hive metastore的方式,这种方式通过访问hive的metastore元数 ...

  10. spring学习笔记(一)创建对象的四种方式

    spring学习笔记(一)创建对象的四种方式 一.简介 ​ Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架. ​ 所谓IoC就是Iversion of Control,控制反 ...

最新文章

  1. 数据可视化(matplotlib绘图)
  2. java 问题排查_JAVA问题排查笔记
  3. 简单的FTP应用程序
  4. Fastai-学习器训练
  5. 字节跳动Deep Retrieval召回模型笔记
  6. GDKOI2015 Day2
  7. LeetCode算法题-Jewels and Stones(Java实现)
  8. 从条纹边框的实现谈盒子模型
  9. 1910101811-2
  10. CodeProject每日精选: Progress controls 进度条
  11. Bootstrap3 响应式表格
  12. 大号字代码php,如何用QQ发超大汉字_php
  13. NOI 2018 归程 (Kruskal重构树)
  14. vlan间路由详细实验步骤
  15. 思维模型 后天天赋(盖洛普天赋分析)
  16. 开源一个安信可A9g小项目微信小程序定位器项目①如何在windows10上环境搭建,编译烧录代码固件,查看运行日志;
  17. python 残差图_利用pyFOAM残差的输出
  18. 教你如何布置家庭影院
  19. Qt 之显示网络图片
  20. html+css悬浮加速器

热门文章

  1. 最近再看一遍《X战警》系列
  2. 解读数字孪生概念 —— 智慧城市大脑
  3. 电脑哔哩哔哩播放器调整为html5,谷歌浏览器插件哔哩哔哩(Bilibili)播放器扩展Extension for Bilibili Player关闭弹幕、截图、画中画...
  4. 手机话费充值和手机流量充值 API
  5. SSM 运行报错Failed to load resource: the server responded with a status of 404 (Not Found)
  6. Java前方交会后方交会编程_摄影测量后方交会、前方交会程序
  7. Photoshop: 将图片转换成psd格式
  8. Windows下获取本地IP地址的两种方法
  9. 租用服务器怎么修改密码,把租的号改密码-租用的服务器怎么改密码?
  10. Git Branching基础操作学习笔记