瞎琢磨先生のJava笔记之读取SpringBoot配置文件的几种方式
一般说来,读取 SpringBoot 配置文件的方式大致可以分为三种(见下↓)。更详细的分类包括是否使用自定义配置文件、自定义配置文件的文件类型(.properties还是.yml)以及配置的 key 是否使用"前缀"等等。
- @Value + [@PropertySource]
- setXxx() + @ConfigurationProperties + [@PropertySource]
- environment.getProperty(“xxx”)
多说无益,直接上一个综合的栗子,一切不言自明。
需求场景:
一个接口需要从 application.properties 、diy.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配置文件的几种方式相关推荐
- Java中读取properties配置文件的八种方式总结
一.前言 在做Java项目开发过程中,涉及到一些数据库服务连接配置.缓存服务器连接配置等,通常情况下我们会将这些不太变动的配置信息存储在以 .properties 结尾的配置文件中.当对应的服务器地址 ...
- Spring-boot中读取config配置文件的两种方式
了解过spring-Boot这个技术的,应该知道Spring-Boot的核心配置文件application.properties,当然也可以通过注解自定义配置文件的信息. Spring-Boot读取配 ...
- Java 读取 .properties 配置文件的几种方式
Java 开发中,需要将一些易变的配置参数放置再 XML 配置文件或者 properties 配置文件中.然而 XML 配置文件需要通过 DOM 或 SAX 方式解析,而读取 properties 配 ...
- springboot读取配置文件的三种方式
项目中springboot读取配置文件的三种方式: 1.使用Environment 2.使用@Value 3.使用@ConfigurationProperties注解映射到bean中,定义一个User ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
- java读取csv文件的两种方式
java读取csv文件的两种方式 1.CsvReader读取 import com.csvreader.CsvReader; /*** CsvReader 读取* @param filePath* @ ...
- java配置文件实现方式_java相关:详解Spring加载Properties配置文件的四种方式
java相关:详解Spring加载Properties配置文件的四种方式 发布于 2020-4-29| 复制链接 摘记: 一.通过 context:property-placeholder 标签实现配 ...
- 快速搭建Springboot项目的两种方式!!
大家好,我是雄雄,欢迎关注微信公众号[雄雄的小课堂]. 前言 Springboot的特点就是简单.快速和方便,使用idea不到一分钟就可以快速搭建springboot项目,并且,在这里,你不用写spr ...
- Spark读取Hive数据的两种方式与保存数据到HDFS
Spark读取Hive数据的两种方式与保存数据到HDFS Spark读取Hive数据的方式主要有两种 1. 通过访问hive metastore的方式,这种方式通过访问hive的metastore元数 ...
- spring学习笔记(一)创建对象的四种方式
spring学习笔记(一)创建对象的四种方式 一.简介 Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架. 所谓IoC就是Iversion of Control,控制反 ...
最新文章
- 数据可视化(matplotlib绘图)
- java 问题排查_JAVA问题排查笔记
- 简单的FTP应用程序
- Fastai-学习器训练
- 字节跳动Deep Retrieval召回模型笔记
- GDKOI2015 Day2
- LeetCode算法题-Jewels and Stones(Java实现)
- 从条纹边框的实现谈盒子模型
- 1910101811-2
- CodeProject每日精选: Progress controls 进度条
- Bootstrap3 响应式表格
- 大号字代码php,如何用QQ发超大汉字_php
- NOI 2018 归程 (Kruskal重构树)
- vlan间路由详细实验步骤
- 思维模型 后天天赋(盖洛普天赋分析)
- 开源一个安信可A9g小项目微信小程序定位器项目①如何在windows10上环境搭建,编译烧录代码固件,查看运行日志;
- python 残差图_利用pyFOAM残差的输出
- 教你如何布置家庭影院
- Qt 之显示网络图片
- html+css悬浮加速器
热门文章
- 最近再看一遍《X战警》系列
- 解读数字孪生概念 —— 智慧城市大脑
- 电脑哔哩哔哩播放器调整为html5,谷歌浏览器插件哔哩哔哩(Bilibili)播放器扩展Extension for Bilibili Player关闭弹幕、截图、画中画...
- 手机话费充值和手机流量充值 API
- SSM 运行报错Failed to load resource: the server responded with a status of 404 (Not Found)
- Java前方交会后方交会编程_摄影测量后方交会、前方交会程序
- Photoshop: 将图片转换成psd格式
- Windows下获取本地IP地址的两种方法
- 租用服务器怎么修改密码,把租的号改密码-租用的服务器怎么改密码?
- Git Branching基础操作学习笔记