SpringBoot读取配置文件的内容
1.@Value读取
在springboot项目中,如果要读取配置文件application.properties或application.yml文件的内容,可以使用自带的注解@Value。以properties方式为例说明,yml方式同上:
1.1单层内容
application.properties配置文件内容:
name=huihui
age=22
sex=1
读取方式:
//导入的类org.springframework.beans.factory.annotation.Value;
@Value("${name}")
private String name; @Value("${age}")
private Integer age; @Value("${sex}")
private String sex;
1.2多层内容
application.properties配置文件内容:
user.name=huihui
user.age=22
user.sex=1
读取方式:
//导入的类org.springframework.beans.factory.annotation.Value;
@Value("${user.name}")
private String name; @Value("${user.age}")
private Integer age; @Value("${user.sex}")
private String sex;
对于多层内容,读取时必须指定到最后一级。如上例必须到path,否则会报错。实际上单层和多层没有区别,只要指定到最后一级即可。
1.3设置默认值
对于有些配置,如果没有在配置文件中配置,那么在启动时就会报错,它也可以设置默认值。
以上面的多层配置为例,并没有配置user.addr的值,在注入时指定默认值:
@Value("${user.name}")
private String name;
@Value("${user.age}")
private Integer age;
@Value("${user.sex}")
private String sex;
@Value("${user.addr:湖北武汉}")
private String addr;
由此可见,要指定默认值,只需要在注入的时候在参数后面添加“:”及默认值即可。
2.@Value+@PropertySource读取
上述只是读取application的配置文件,那么如何读取自定义的配置文件呢?那就需要使用另外一个注解@PropertySource,指定配置文件的路径和名称。
2.1读取properties文件内容
在resources目录下新建testAAA.properties文件,内容如下:
user.name=huihui
user.age=22
user.sex=1
使用组件的方式读取:
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component; @Component
@PropertySource("classpath:testAAA.properties")
public class TestService { @Value("${user.name}")
private String name; @Value("${user.age}")
private Integer age; @Value("${user.sex}")
private String sex; public void test() {
System.out.println(name);
System.out.println(age);
System.out.println(sex);
}
}
2.1读取yml文件内容
对于yml的内容,如果还是采用上面的方式,是无法读取到内容的,还会报错。需要在上述基础上指定自定义的工厂类。
1)新建一个类,继承DefaultPropertySourceFactory类重写其方法
package com.zys.springboottestexample.config; import org.springframework.boot.env.YamlPropertySourceLoader;
import org.springframework.core.env.PropertySource;
import org.springframework.core.io.support.DefaultPropertySourceFactory;
import org.springframework.core.io.support.EncodedResource; import java.io.IOException;
import java.util.List; public class PropertySourceFactory extends DefaultPropertySourceFactory {
@Override
public PropertySource<?> createPropertySource(String name, EncodedResource resource) throws IOException {
if (resource == null) {
return super.createPropertySource(name, resource);
}
List<PropertySource<?>> sources = new YamlPropertySourceLoader().load(resource.getResource().getFilename(), resource.getResource());
return sources.get(0);
}
}
2)在读取时指自定义的工厂类
@Component
@PropertySource(value="classpath:testAAA.yml", factory = PropertySourceFactory.class)
public class TestService { @Value("${user.name}")
private String name; @Value("${user.age}")
private Integer age; @Value("${user.sex}")
private String sex; public void test() {
System.out.println(name);
System.out.println(age);
System.out.println(sex);
}
}
yml的内容同上,可粘贴:
user:
name: huihui
age: 22
sex: 1
3.@Value+@ConfigurationProperties读取
3.1读取默认的application.properties文件
当对同一对象有多个属性时,每次在使用这些值时都重复的使用Value注解注入,有些麻烦,实际上也可以把这些属性注入到bean上,需要使用的地方直接使用此bean即可。读取application.yml文件可参考此方法,是一样的读取方式。
properties内容:
user.name=huihui
user.age=22
user.sex=1
读取内容:
@Component
@ConfigurationProperties(prefix="user")
@Data
public class TestService { String name;
String age;
String sex; public void test() {
System.out.println(name);
System.out.println(age);
System.out.println(sex);
}
}
需要注意的是,读取时,属性必须有set方法。
3.2读取自定义的properties文件
要读取自定义的文件,根据第二章的思想,如果可以指定文件的位置和名称就可以读取。但ConfigurationProperties注解并不能指定,这就需要PropertySource结合来指定自定义的配置文件。
@Component
@ConfigurationProperties(prefix="user")
@PropertySource("classpath:testAAA.properties")
@Data
public class TestService { private String name; private Integer age; private String sex; public void test() {
System.out.println(name);
System.out.println(age);
System.out.println(sex);
}
}
对于yml的内容,参考第二章自行。
SpringBoot读取配置文件的内容的更多相关文章
- SpringBoot读取配置文件源码探究
1. SpringBoot读取配置文件源码探究 1.1. 概览 springboot的源码是再原来的Spring源码上又包了一层,看过spring源码都知道,当我们从入口debug进去的时候,原来的S ...
- springboot读取配置文件中的信息
在一个项目中,我们有时候会把一些配置信息写入到一个配置文件中,在java代码中读取配置文件的信息.在此记录下读取属性文件中的内容. 在springboot项目中,springboot的配置文件可以使用 ...
- SpringBoot 读取配置文件的值 赋给静态变量
需求:写了一个工具类,但是工具类中的一些变量需要放到配置文件中,而这个工具类中的变量与方法都是静态的,这个时候我需要一个办法将配置文件中的相关配置读取过来赋值给这些静态变量.找了一些文章,试了一些方法 ...
- Springboot读取配置文件的两种方法
第一种: application.yml配置中的参数: zip: Hello Springboot 方法读取: @RestController public class ControllerTest ...
- springboot读取配置文件的顺序
前言 今天测试一些东西,发现配置文件连接的数据库一直不正常,数据也不对,今天请教了之后,原来springboot的配置文件加载不仅仅是项目内的配置文件. 正文 项目目录是这样的:文件夹下有:项目,ap ...
- springboot 读取配置文件
读取配置文件 在以前的项目中我们主要在 XML 文件中进行框架配置,业务的相关配置会放在属性文件中,然后通过一个属性读取的工具类来读取配置信息. 在 Spring Boot 中我们不再需要使用这种方式 ...
- SpringBoot读取配置文件三步走
1首先新建application.properties文件 cn.qdl.demo.url=http://localhost:8080 2写一个类包上面的配置文件,类名随便取 public class ...
- SpringBoot 读取配置文件及profiles切换配置文件
读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法有两种,都比较简单. 先创 ...
- 【springboot读取配置文件】@ConfigurationProperties、@PropertySource和@Value
概念: @ConfigurationProperties : 是springboot的注解,用于把主配置文件中配置属性设置到对于的Bean属性上 @PropertySource :是spring的注解 ...
随机推荐
- Python: 捕获正在运行的CMD窗口内容
最近需要捕获已经在运行的CMD窗口内容,并且需要根据指定输出内容来判断下一步的行动(输入指定内容). 尝试了很多次后,想到一个思路: 通过inspect.exe来获取CMD窗口Name信息通过uiau ...
- [AHOI2009] [BZOJ1799] 月之迷 (数位DP)
给出两个数a,ba,b,求出\([a,b]\)中各位数字之和能整除原数的数的个数. 我们按照模板的做法来想,枚举到第pos位时,要确定这一位的数字,可以更新现在所填数字的和,但对于最终的和无从得知,是 ...
- 二叉排序树的构造 && 二叉树的先序、中序、后序遍历 && 树的括号表示规则
二叉排序树的中序遍历就是按照关键字的从小到大顺序输出(先序和后序可没有这个顺序) 一.以序列 6 8 5 7 9 3构建二叉排序树: 二叉排序树就是中序遍历之后是有序的: 构造二叉排序树步骤如下: 插 ...
- 使用Github+jsDelivr搭建图床和存储服务
使用元素 我的博客NLNet 并未搭建自己的博客,使用博客园(cnblogs),自定义了主题NLNet-Theme. 写作工具Typora 优秀的Markdown编辑器.参考NLNet-Theme,我 ...
- WPF Dispatcher 频繁调度导致的性能问题
问题 WPF Dispatcher 提供了UI线程之外的线程异步操作(请求)UI变化.一次Invoke/BeginInvoke调用产生一个DispatcherOperation,将挂在调度队列中,按照 ...
- [笔记]吞吐量(TPS)、QPS、并发数、响应时间(RT)概念
开发的原因,需要对吞吐量(TPS).QPS.并发数.响应时间(RT)几个概念做下了解,查自百度百科,记录如下: 1. 响应时间(RT) 响应时间是指系统对请求作出响应的时间.直观上看,这个指标与人对软 ...
- Cobbler服务部署
1.安装epel源 yum -y install epel-release 2.安装cobbler环境所需的包 yum install -y httpd dhcp xinetd tftp cobble ...
- Nginx 四层负载均衡
目录 四层负载均衡概述 配置七层负载均衡 配置四层负载均衡 四层负载均衡概述 四层负载均衡是基于IP+端口的负载均衡,七层负载均衡是基于URL或主机名等应用层信息的负载均衡. 其他层负载均衡(转载): ...
- Chapter Zero 0.1.3 其他单元设备以及运作流程
其他单元设备 五大单元中的控制单元.算数逻辑段元都被整合到CPU的封装中, 但其实系统单元中,不止有CPU(控制单元.算数逻辑单元), 计算机单元还有哪些? 系统单元:系统单元包括CPU.主存储器(内 ...
- Maven与Nexus3.x环境构建详解
一.Maven介绍Apache Maven是一个创新的软件项目管理和综合工具.Maven提供了一个基于项目对象模型(POM)文件的新概念来管理项目的构建,可以从一个中心资料片管理项目构建,报告和文件. ...