-
SpringBoot使用spring.factories加载默认配置的实现代码
在日常开发过程中,发布一些产品或者框架时,会遇到某些功能需要一些配置才能正常运行,这时我们需要的提供默认配置项,同时用户也能覆盖进行个性化
在日常开发过程中,发布一些产品或者框架时,会遇到某些功能需要一些配置才能正常运行,这时我们需要的提供默认配置项,同时用户也能覆盖进行个性化
创建Initializer
public class FrameContextInitializer implements ApplicationContextInitializer {
@Override
public void initialize(ConfigurableApplicationContext applicationContext) {
System.out.println("FrameContextInitializer--Start");
System.out.println("FrameContextInitializer--End");
}
}
配置Initializer
resources/META-INF文件夹下创建spring.factories文件,指定实现类
org.springframework.context.ApplicationContextInitializer=com.haopan.frame.common.initializer.FrameContextInitializer
实现Initializer
读取默认yml文件
String frameYAMLFilePath = ClassPathFileUtil.getFilePathActual("systemfile/config/frame.yml");
public static String getFilePathActual(String classFilePath) {
String filePath = "";
try {
String templateFilePath = "tempfiles/classpathfile/";
File tempDir = new File(templateFilePath);
if (!tempDir.exists()) {
tempDir.mkdirs();
}
String[] filePathList = classFilePath.split("/");
String checkFilePath = "tempfiles/classpathfile";
for (String item : filePathList) {
checkFilePath += "/" + item;
}
File tempFile = new File(checkFilePath);
if (tempFile.exists()) {
tempFile.delete();
}
//解析
ClassPathResource classPathResource = new ClassPathResource(classFilePath);
InputStream inputStream = classPathResource.getInputStream();
checkFilePath = "tempfiles/classpathfile";
for (int i = 0; i < filePathList.length; i++) {
checkFilePath += "/" + filePathList[i];
if (i == filePathList.length - 1) {
//文件
File file = new File(checkFilePath);
if(!file.exists()){
FileUtils.copyInputStreamToFile(inputStream, file);
}
} else {
//目录
tempDir = new File(checkFilePath);
if (!tempDir.exists()) {
tempDir.mkdirs();
}
}
}
inputStream.close();
filePath = checkFilePath;
} catch (Exception e) {
e.printStackTrace();
}
return filePath;
}
将yml内容加到环境上下文
这边的addLast是执行顺序为最后读取,如果项目的yml文件没有读取到,则默认配置是一个保底
System.out.println("FrameContextInitializer--Start");
PropertySource<?> propertySource = loader.load("frameConfiguration", new InputStreamResource(new FileInputStream(frameYAMLFilePath))).get(0);
applicationContext.getEnvironment().getPropertySources().addLast(propertySource);
System.out.println("FrameContextInitializer--End");
到此这篇关于SpringBoot使用spring.factories加载默认配置的实现代码的文章就介绍到这了,更多相关SpringBoot spring.factories加载配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持
原文链接:https://blog.csdn.net/u013407099/article/details/129672047
最新更新
Java中处理XML数据的方法
SpringBoot使用spring.factories加载默认配置的
Java解析微信获取手机号信息的示例步骤
Java中通过sftp协议实现上传下载的示例代
Java中hashMap遍历的9种方式
Java通过notify和wait实现线程间的通信功能
MyBatis-Plus模糊查询特殊字符串转义的实现
SpringBoot中如何打印Http请求日志
Java中使用WebSocket的几种方式
mybatis-plus实现四种lambda表达式方式
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
uniapp/H5 获取手机桌面壁纸 (静态壁纸)
[前端] DNS解析与优化
为什么在js中需要添加addEventListener()?
JS模块化系统
js通过Object.defineProperty() 定义和控制对象
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比