iis无法读取配置文件_SpringBoot 有很多读取配置文件的方法,你知道几个? 静态方法读取呢?...

SpringBoot 如何在静态方法中读取配置文件的值

在Spring中呢有很多读取配置文件值的相关注解,读取这些配置文件都是依赖于Spring的方式。我发现的读取配置文件的方式有好几种。

1、@Value 注解

2、@ConfigurationProperties 和 @EnableConfigurationProperties(@Compent)

3、@PropertySource

4、Environment

5、PropertySourcesPlaceholderConfigurer

6、自己写一个静态读取的配置文件的工具类(包括 jar 包外的配置文件,与SpringBoot读取的配置文件一致)

配置好一个配置文件
// yml
// 写一个测试类
1、@Value 注解 读取

@Value 注解的读取配置文件是依赖于IOC容器的,也属于依赖注入,这一点看过Spring的IOC源码的都清楚,属于属性的注入,所以是依赖于Spring的,所以呢,在该类使用@Value注解的时候,该类必须是归属于Spring管理的类。

示例:

@Component
2、@ConfigurationProperties 和 @EnableConfigurationProperties

@ConfigurationProperties 注解适用于自动化配置的类,在SpringBoot的jdbc的数据源自动化配置:

@ConfigurationProperties

在SpringBoot中我们使用数据源是这样子配置的:

# 数据源

所以在我们也需要写一个自动化配置类的时候,就可以使用改注解来处理。

有个地方需要注意的地方

类似于这样有行杠的,在java类中需要与驼峰的方式命名。

driver-class-name  ---->  driverClassName

示例: 配置文件在上面已经写了

@ConfigurationProperties

在启动类中加入 注解 @EnableConfigurationProperties(value={User.class})

或者在 User.class 加上 @Compent 注解

@EnableConfigurationProperties
3、@PropertySource 和 @Configuration

@PropertySource 指定加载配置文件,但是不支持yml 的配置方式,也不支持打jar包后读取jar包外的配置,只能是类路径下的,不友好。也是依赖Spring的所以使用改注解的类需要放到Spring的IOC管理

示例:

配置

config.app=TestApp
config.version=1.0.0

配置类:

@Component
4、Environment

在Spring里可以通过注入 该对象,就可以读取配置文件的的属性值,也是依赖于Spring的注入

获得改对像的方式有好多方式:介绍两种

  • @Autowired依赖注入
@Autowired
  • 实现接口EnvironmentAware。当一个工具类使用,但是该工具类得需要在Spring容器启动后,才可以使用
@Component

c6b30aaa956a6db15d0dcd5c34e77605.png

37bbc5baec605360a30e7fc8043326a4.png
5、 PropertySourcesPlaceholderConfigurer

PropertySourcesPlaceholderConfigurer是个bean工厂后置处理器的实现,同时也实现了 EnvironmentAware,也是处理 @Value 属性注入的处理关键类。该类的属性也是来自 Environment 的。

示例:

@Component

36c386ed5bb5df6baee7470d749cbaea.png
6、自己写一个静态读取的配置文件的工具类(包括 jar 包外的配置文件,与SpringBoot读取的配置文件一致

在上面读取配置文件的方式中有几个点:

  • 1、这些文件的方式都依赖Spring的注入。
  • 2、静态方式读取不方便,必须得在Spring容器启动才可以加载配置文件,对于有时需要在Spring容器启动完毕前,需要加载配置文件不方便。
  • 3、自定义加载配置问题,不可以加载jar包外的自定义配置文件。除了:application.yml/ properties和 不同环境的配置文件外。 比如 @PropertySource 注解只能加载 类路径下的。打jar包后不可以使用,切不能加载y ml配置。

结合以上几点,我们可以自己写一个 在Spring的读取配置的基础上,补全以上问题的工具类。

1、工具类的功能介绍:

  • 如果在启动项目的时候,通过参数指定配置文件的方式的时候。该工具类不会加载该参数指定的其它配置文件。文件的读取规则如下。
  • 基于SpringBoot 使用
  • 工具类加载配置文件的顺序与SpringBoot保持一致

配置文件有先级:. properties> .yml ;优先加载. properties 如果没有就加载 yml的

开发环境下:resources/config > resources/

jar包:jar包同级目录的config/ > jar包同级目录 > jar 包内的resources/config/ jar 包内的resources/

  • 默认加载:application.properties、application.properties的spring.profiles.active 指定的文件、和一个config.propertis/config.yml(优先于config.propertis);
  • 上一点的三个默认配置文件可以在jar包同级目录config文件夹下或者jar包同级目录下。方便于修改,于SpringBoot加载顺序一样。
  • 加载 list集合方式:

例如:

不支持这样子配置的集合读取:

lists
  • 不支持 集合对象方式读取
  • map 结构方式读取

例如:

不支持对象嵌套对象。

map

#properties map={name: tom , age:18 } ```

关于改工具类的集合和map的配置:

集合和map的读取方式,需要按照如上说明配置。

如果不使用该工具类读取集合和map结构,但是需要注入到类对象中的话,可以按照SpringBoot中的配置规则去配置。

也可以配置成集合对象,当字符串读取,然后自己转换。

2、工具类的使用(两种)

1、可以将工具打成一个 jar 包/将该源码,引入到项目中,然后在启动类加上注解 @EnableReadConfig

该方式需要依赖于Spring的方式,可以读取系统变量,需要等待Spring启动,加载。

2、手工加载

该方式目前不可读取系统变量,但是可以不依赖Spring容器去加载。

// 参数 类加载器 :引用该类的任意类class  

3、加载第三方配置文件

void 

加了 classpath:代表加载的是类路径下的。其它的就是 绝对路径下的配置文件

示例:

@SpringBootApplication

打印结果:

jar包方式:

d7dfd471a8829f23acdb72852d170cc3.png

d7dfd471a8829f23acdb72852d170cc3.png

开发环境方式:

fd6aaf0aebb2140cb65d0aedc8d097d0.png

3、代码结构

tool-read-config

04266f2e6cfb9f9354476953e1d96940.png

PropertiesUtils.java工具类api

e1f004ae428fbd8815d0cf722913f5ee.png
memoryoverflow/tools-read-config​gitee.com
a7dd8a89c39ce8c068f8cf400c67450b.png

https://gitee.com/lyj08/tools-read-config

http://weixin.qq.com/r/YxxocNLExo_5rZYT90lx (二维码自动识别)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode 1837. K 进制表示下的各位数字总和

文章目录1. 题目2. 解题1. 题目 给你一个整数 n(10 进制)和一个基数 k ,请你将 n 从 10 进制表示转换为 k 进制表示,计算并返回转换后各位数字的 总和 。 转换后,各位数字应当视作是 10 进制数字,且它们的…

微信开发学习日记(一):快速阅读5本书,掌握整体背景

2015年1月开始学习微信开发。已经有多年开发经验了,从网上文章来看,微信开发主要是接口,然后是业务逻辑,不是很难。所以,我比较强调学习效率。一天学一点,是不能满足我的快速学习欲望的。在京东上&#xff…

c语言中把一个数缩小十倍_C语言实例第04期,在控制台打印出著名的杨辉三角...

点击上方“C语言中文社区”,选择“设为星标★”技术干货第一时间送达!往期回顾:C语言实例第01期,十进制数转换二进制数C语言实例第02期,判断某一年是否为闰年C语言实例第03期,使用*打印平行四边形实例代码/…

LeetCode 1838. 最高频元素的频数(二分查找)

文章目录1. 题目2. 解题1. 题目 元素的 频数 是该元素在一个数组中出现的次数。 给你一个整数数组 nums 和一个整数 k 。 在一步操作中,你可以选择 nums 的一个下标,并将该下标对应元素的值增加 1 。 执行最多 k 次操作后,返回数组中最高频…

wafer小程序服务器,Wafer - 企业级微信小程序全栈方案

Wafer 服务端 SDK - C#本项目是 Wafer 组成部分,以 SDK 的形式为业务服务器提供以下服务:SDK 获取本项目遵守 MIT 协议,可以直接下载 SDK 源码进行修改、编译和发布。如果使用自动部署并选择 C# 语言,则分配的业务服务器里已经部署…

Android学习按键事件监听与Command模式

Android学习按键事件监听与Command模式 - Dufresne - 博客园 Android学习按键事件监听与Command模式 一 Command模式 意图: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持…

fileinputstream_从Java中的FileInputStream读取字节

以下示例显示了如何从Java中的FileInputStream读取字节。import java.io.File;import java.io.FileInputStream;public class fileInputStream {public static void main(String[] args) {byte[] data new byte[1024]; //allocates memory for 1024 bytes//be careful about h…

LeetCode 1839. 所有元音按顺序排布的最长子字符串(滑动窗口)

文章目录1. 题目2. 解题1. 题目 当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母(a ,e ,i ,o ,u)都必须 至少 出现一次。这些元音字母的顺序都必须按照 字…

特征处理

学自 极客时间 《深度学习推荐系统实战》 特征分为两类: 类别特征(性别、地理位置、季节、天气、风格)数值型特征(年龄、收入、点击量、点击率) 类别特征经过 One-Hot 编码后放入特征向量、或者 多个的特征值采用 M…

WIN 10 安装 Hadoop 2.7.7 + Spark 2.4.7 记录

文章目录0. 常规解压安装,并添加环境变量1. 下载并覆盖 bin 文件夹2. 使VERSION文件的clusterID一致3. 贴下单机配置4. 测试 Hadoop5. 安装Spark环境:win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.70. 常规解压安装,并添加…

canal mysql从库_canal中间件|数据增量同步解决方案

上一文中提到延时双删等策略实现数据一致性的时候,可能存在删除缓存失败的情况,就会出现缓存和数据库不一致的问题。为了应对删除缓存失败而导致数据不一致的问题,可以通过回溯数据库日志文件,提供一个保障的重试机制即可。流程如…

dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)

# 密度聚类DBSCAN、HDBSCANDBSCANDBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有…

Spark IDEA 编程环境配置

文章目录1. 下载资料准备2. 建立项目、添加环境设置3. 第一个 Spark 程序学自:Spark机器学习实战 https://book.douban.com/subject/35280412/ 记录一下踩过的坑: 环境:win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.7 …

天池 在线编程 订单分配(回溯)

文章目录1. 题目2. 解题1. 题目 描述 打车派单场景, 假定有N个订单,待分配给N个司机。 每个订单在匹配司机前,会对候选司机进行打分,打分的结果保存在N*N的矩阵score,其中score[i][j]代表订单 i 派给司机 j 的分值。 假定每个订单…

2015年北京户口全攻略

最新统计数据指出 截至2013年底,北京市常住人口为2114.8万人,其中常住外来人口为802.7万人。和“北京户口”捆绑的字眼,历来是身份、福利,以至于幸福感、安全感。那么北京户口有什么好处?外来人口如何落户北京呢&#…

水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合

dada-report报表整合UReport报表设计器工具结合日常工作和学习实践,针对传统报表子站面临的问题,尝试借助UReport报表设计器解决1.可在现有工程基础上引入Ureport2报表设计器Ureport报表设计器是一个基于WEB的在线报表设计器,其具有良好的界面…

LeetCode 1844. 将所有数字用字符替换

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 s ,它的 偶数 下标处为小写英文字母,奇数 下标处为数字。 定义一个函数 shift(c, x) ,其中 c 是一个字符且 x 是一个数字,函数返回字母表中 c 后面第 x 个字符。 …

LeetCode 1845. 座位预约管理系统(set)

文章目录1. 题目2. 解题1. 题目 请你设计一个管理 n 个座位预约的系统,座位编号从 1 到 n 。 请你实现 SeatManager 类: SeatManager(int n) 初始化一个 SeatManager 对象,它管理从 1 到 n 编号的 n 个座位。所有座位初始都是可预约的。in…

unity game和scene效果不一样_不同的真石漆装饰效果也是不一样的

外墙真石漆真的是一件很好的产品,具有防火性、防水性、安全且环保、粘力强、永不褪色等特点,无疑是人们较好的选择,在很早之前就已经逐渐的取代了瓷砖和其他石材在人们心中的位置。真石漆的品种不止一种,按照装饰效果我们可以分为…

噪声产生原因_空调噪声大?啄木鸟家庭维修,看看属于哪一个问题

夏天终于要结束了,我只想安静的睡一个好觉。这个夏天中,楼上的空调每夜不休不眠的工作着,可这个空调为什么运作时的声音这么“巨大”。“轰轰轰……”,楼层都似乎和它产生了共振。而每晚的我,反反复复努力入睡&#xf…