目录

@PropertySource 加载 properties 配置文件

@PropertySource 加载 yml 配置文件

@PropertySource 从本地磁盘加载文件

@ImportResource 导入Spring 配置文件


@PropertySource 加载 properties 配置文件

1、通过《Spring Boot  @ConfigurationProperties 、@Value 注值》知道使用“@Value”与“@ConfigurationProperties”可以从全局配置文件“application.properties”或者“application.yml”中取值,然后为需要的属性赋值。

2、当应用比较大的时候,如果所有的内容都当在一个配置文件中,就会显得比较臃肿,同时也不太好理解和维护,此时可以将一个文件拆分为多个,使用 @PropertySource 注解加载指定的配置文件,注解常用属性如下:

String name() default "" 指明此属性源的名称。如果省略,将根据基础资源的描述生成名称。
String[] value()

指示要加载的属性文件的资源位置。

1、支持传统和基于XML的属性文件格式,如 {"classpath:/com/myco/app.properties"} 或 {"file:/path/to/file.xml"}

2、支持加载类路径下的文件以及本地磁盘上的文件。

boolean ignoreResourceNotFound() default false 指示 value 资源位置查找失败时是否忽略,默认 false,找不到就会报错。
String encoding() default "" 给定资源的特定字符编码,例如“UTF-8”
Class<? extends PropertySourceFactory> factory()

指定自定义属性SourceFactory(如果有)。

默认情况下,将使用标准资源文件的默认工厂。

3、下面演示使用 @PropertySource 注解 加载类路径下的 user.properties 配置文件,为 User.java POJO 对象的属性赋值。

/*** 用户···实体* {@code @Component} 将本来标识为一个 Spring 组件,因为只有是容器中的组件,容器才会为 @ConfigurationProperties 提供此注入功能* {@code @PropertySource} 指明加载类路径下的哪个配置文件来注入值* {@code @ConfigurationProperties} 表示 告诉 SpringBoot 将本类中的所有属性和配置文件中相关的配置进行绑定;* * prefix = "user1" 表示 将配置文件中 key 为 user 的下面所有的属性与本类属性进行一一映射注入值,如果配置文件中-* * 不存在 "user1" 的 key,则不会为 POJO 注入值,属性值仍然为默认值** @author wangmaoxiong* Created by Administrator on 2018/7/11 0011.*/
@Component
@PropertySource(value = {"classpath:user.properties"})
@ConfigurationProperties(prefix = "user1")
public class UserProperty {private Integer id;private String lastName;private Integer age;private Date birthday;private List<String> colorList;private Map<String, String> cityMap;private Dog dog;

src/main/java/com/wmx/yuanyuan/pojo/UserProperty.java · 汪少棠/yuanyuan - Gitee.com

/*** 狗 实体类-----------普通 Java Bean* 被依赖项可以不加 @ConfigurationProperties 注解,但是必须提供 getter、setter 方法** @author wangmaoxiong* Created by Administrator on 2018/7/11 0011.*/
public class Dog {private Integer id;private String name;private Integer age;

src/main/java/com/wmx/yuanyuan/pojo/Dog.java · 汪少棠/yuanyuan - Gitee.com

4、在类路径下提供 user.properties 配置文件如下(.yml 文件也是同理):

user1.id=112
user1.lastName=\u5F20\u65E0\u5FCC
user1.age=110
user1.birthday=2018/07/12
user1.colorList=red,yellow,green,blacnk
user1.cityMap.mapK1=\u957F\u6C99\u5E02
user1.cityMap.mapK2=\u6DF1\u5733\u5E02
user1.dog.id=7523
user1.dog.name=\u72D7\u4E0D\u7406
user1.dog.age=3

src/main/resources/user.properties · 汪少棠/yuanyuan - Gitee.com

5、测试运行:src/test/java/com/wmx/yuanyuan/PropertySourceTest.java · 汪少棠/yuanyuan - Gitee.com

@PropertySource 加载 yml 配置文件

1、仍然以为实体对象注入属性值为例进行演示:

/*** 用户···实体* {@code @Component} 将本来标识为一个 Spring 组件,因为只有是容器中的组件,容器才会为 @ConfigurationProperties 提供此注入功能* {@code @PropertySource} 指明加载类路径下的哪个配置文件来注入值* * factory:用于指定 @PropertySource 加载 yml 配置文件.* {@code @ConfigurationProperties} 表示 告诉 SpringBoot 将本类中的所有属性和配置文件中相关的配置进行绑定;* * prefix = "user" 表示 将配置文件中 key 为 user 的下面所有的属性与本类属性进行一一映射注入值,如果配置文件中-* * 不存在 "user" 的 key,则不会为 POJO 注入值,属性值仍然为默认值** @author wangmaoxiong* Created by Administrator on 2018/7/11 0011.*/
@Component
@PropertySource(value = {"classpath:user.yml"}, factory = PropertySourceFactory.class)
@ConfigurationProperties(prefix = "user")
public class UserYml {private Integer id;private String lastName;private Integer age;private Date birthday;private List<String> colorList;private Map<String, String> cityMap;private Dog dog;
//......
}

src/main/java/com/wmx/yuanyuan/pojo/UserYml.java · 汪少棠/yuanyuan - Gitee.com

2、然后提供用于处理 yml 配置文件的属性资源工程如下:

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;
/*** 用于  @PropertySource 加载 yml 配置文件.** @author wangmaoxiong* @version 1.0* @date 2020/5/25 20:45*/
public class PropertySourceFactory extends DefaultPropertySourceFactory {@Overridepublic 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);}
}

src/main/java/com/wmx/yuanyuan/factory/PropertySourceFactory.java · 汪少棠/yuanyuan - Gitee.com

测试运行:src/test/java/com/wmx/yuanyuan/PropertySourceTest.java · 汪少棠/yuanyuan - Gitee.com

@PropertySource 从本地磁盘加载文件

1、PropertySource 不仅支持加载类路径下的文件,还支持加载本地磁盘上的文件。

/*** 用户···实体————读取本地磁盘上的配置文件* * @Component  将本来标识为一个 Spring 组件,因为只有是容器中的组件,容器才会为 @ConfigurationProperties 提供此注入功能* * @PropertySource 指明加载类路径下的哪个配置文件来注入值,既可以是类路径下,也可以上磁盘上* * @ConfigurationProperties 表示 告诉 SpringBoot 将本类中的所有属性和配置文件中相关的配置进行绑定;* * * prefix = "user1" 表示 将配置文件中 key 为 user 的下面所有的属性与本类属性进行一一映射注入值,如果配置文件中-* * * 不存在 "user1" 的 key,则不会为 POJO 注入值,属性值仍然为默认值* <p>* 磁盘路径可以是相对路径,绝对路径,也可以通过系统属性值指定变量* * 相对路径,文件在应用根目录下:@PropertySource(value = {"file:userDisk.properties"})* * 相对路径,文件在应用根目录下:@PropertySource(value = {"file:./userDisk.properties"})* * 绝对路径,在指定的路径下:@PropertySource(value = {"file:D:\\project\\IDEA_project\\yuanyuan\\userDisk.properties"})* * 通过系统属性值指定变量:@PropertySource(value = {"file:${user.dir}/userDisk.properties"})* * * user.dir:用户的当前工作目录** @author wangmaoxiong* Created by Administrator on 2018/7/11 0011.*/
@Component
@PropertySource(value = {"file:${user.dir}/userDisk.properties"})
@ConfigurationProperties(prefix = "user2")
public class UserDisk {private Integer id;private String lastName;private Integer age;private Date birthday;private List<String> colorList;private Map<String, String> cityMap;private Dog dog;

src/main/java/com/wmx/yuanyuan/pojo/UserDisk.java · 汪少棠/yuanyuan - Gitee.com

磁盘文件(其它 yml、xml格式也是同理):userDisk.properties · 汪少棠/yuanyuan - Gitee.com

测试类:src/test/java/com/wmx/yuanyuan/PropertySourceTest.java · 汪少棠/yuanyuan - Gitee.com

@ImportResource 导入Spring 配置文件

1、@ImportResource 注解用来导入 Spring 的配置文件,如核心配置文件 "beans.xml",从而让配置文件里面的内容生效;

2、如果应用中仍然想采用以前 xml 文件的配置方式,如 "beans.xml" ,则使用 “@ImportResource” 注解轻松搞定。

3、将 @ImportResource 标注在一个配置类上,通常直接放置在应用启动类上,和 @SpringBootApplication 一起即可。

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ImportResource;
/*** 应用启动类** @ImportResource 必须放置在配置类上,通常放在启动类即可,用 value 指明导入类路径下的那个 Spring 配置文件*/
@ImportResource(value = {"classpath:beans.xml"})
@SpringBootApplication
public class CocoApplication {public static void main(String[] args) {SpringApplication.run(CocoApplication.class, args);}
}

4、然后就可以在类路径下提供原始的 beans.xml 配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 放入到Sping容器中,这是以前Spring的内容,不再累述--><bean id="userService" class="com.lct.service.UserService"/>
</beans>

5、启动应用控制台会打印:loading XML bean definitions from class path resource [beans. xml] 表示加载成功。

Spring Boot @PropertySource 加载配置文件、@ImportResource 导入Spring 配置文件相关推荐

  1. eclipse创建spring boot项目加载不到application.properties配置文件

    在配置文件application.properties中修改了端口号,但重启服务后发现端口号并没有跟着改变,发现是项目启动时没有加载application.properties文件导致 解决:项目-& ...

  2. 在Spring Boot中加载初始化数据

    文章目录 依赖条件 data.sql文件 schema.sql 文件 @sql注解 @SqlConfig 注解 在Spring Boot中加载初始化数据 在Spring Boot中,Spring Bo ...

  3. springboot 读取配置文件_使用 @ConfigurationProperties 在 Spring Boot 中加载配置

    本文地址: 使用 @ConfigurationProperties 在 Spring Boot 中加载配置 使用 Spring Boot 加载配置文件的配置非常便利,我们只需要使用一些注解配置一下就能 ...

  4. Spring Boot配置加载顺序

    Spring Boot 不仅可以通过配置文件进行配置,还可以通过环境变量.命令行参数等多种形式进行配置.这些配置都可以让开发人员在不修改任何代码的前提下,直接将一套 Spring Boot 应用程序在 ...

  5. 23. Spring Boot启动加载数据CommandLineRunner【从零开始学Spring Boot】

    2019独角兽企业重金招聘Python工程师标准>>> 102. Spring Boot之CommandLineRunner和ApplicationRunner[从零开始学Sprin ...

  6. Spring Boot : 资源加载器

    1.美图 2.概述 前言参考: 源码:Spring boot 主程序的功能(启动流程) ResourceLoader接口,在 Spring 中用于加载资源,通过它可以获取一个Resouce 对象.使用 ...

  7. Spring Boot - 花式加载配置文件

    文章目录 Pre 导图 Pre Spring Boot - ConfigDataEnvironmentPostProcessor(Boot 2.4)搞定配置文件加载优先级 导图

  8. Spring Boot 配置加载顺序详解

    使用 Spring Boot 会涉及到各种各样的配置,如开发.测试.线上就至少 3 套配置信息了.Spring Boot 可以轻松的帮助我们使用相同的代码就能使开发.测试.线上环境使用不同的配置. 在 ...

  9. spring boot实战(第十篇)Spring boot Bean加载源码分析

    前言 前面的文章描述了Application对应Bean的创建,本篇将阐述spring boot中bean的创建过程 refresh 首先来看SpringApplication#run方法中refre ...

  10. Spring Boot 启动加载数据 CommandLineRunner

    实际应用中,我们会有在项目服务启动的时候就去加载一些数据或做一些事情这样的需求.  为了解决这样的问题,Spring Boot 为我们提供了一个方法,通过实现接口 CommandLineRunner ...

最新文章

  1. 神经网络 | 受限波尔兹曼机(附源代码)
  2. 手风琴html例子,jquery实现简单手风琴菜单效果实例
  3. 关于Java在Linux or Android平台调用.so库
  4. 李宏毅机器学习(八)自编码器(Auto-encoder)
  5. 切面是异步还是同步操作‘_细说JS异步发展历程
  6. c#位数不够0补充完_C# 位数不足补零
  7. Magento Url重写修改
  8. oracle创建索引后sqlldr导入错误
  9. 对比学习(Contrastive Learning)在CV与NLP领域中的研究进展
  10. 凸优化第二章凸集 2.6 对偶锥与广义不等式
  11. MovieLens 数据集补充版爬虫代码解析
  12. sql语句中select……as的用法
  13. BlueScreen OS Version: 6.1.7600.2.0.0.256.4 Locale ID: 1033
  14. 【C# 练习】3个可乐瓶可以换一瓶可乐,现在有364瓶可乐。问一共可以喝多少瓶可乐,剩下几个空瓶?
  15. pandas中isin()函数及其逆函数使用
  16. FX5u控制4个伺服,一个完整的项目 回原点、JOG手动、绝对定位、相对定位、控制等部分
  17. 常用的sql语句,sql使用大全
  18. Uva509 RAID
  19. TypeScript报错Object is possibly ‘undefined‘
  20. ureport2 vue版本实现

热门文章

  1. member selection 运算符是什么
  2. 一张表不能超过多少索引_论文一般查重率不能超过多少
  3. python和pytorch关系_pytorch 模拟关系拟合——回归实例
  4. 【大数据部落】R语言犯罪率回归模型报告Regression model on crimerate report
  5. 【大数据部落】基于ARIMA、SVM、随机森林销售的时间序列预测
  6. struts教程笔记6
  7. 学计算机自考商务英语本科好吗,自考本科商务英语专业真的难吗
  8. cv2读取带中文路径方法
  9. caffe/build/tools下会生成一些工具
  10. Ubuntu16.04 +cuda8.0+cudnn+caffe+theano+tensorflow配置明细