SpringBoot使用spring.factories加载默认配置的实现代码,
分享于 点击 11060 次 点评:283
SpringBoot使用spring.factories加载默认配置的实现代码,
目录
- 创建Initializer
- 配置Initializer
- 实现Initializer
- 读取默认yml文件
- 将yml内容加到环境上下文
在日常开发过程中,发布一些产品或者框架时,会遇到某些功能需要一些配置才能正常运行,这时我们需要的提供默认配置项,同时用户也能覆盖进行个性化
创建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加载配置内容请搜索3672js教程以前的文章或继续浏览下面的相关文章希望大家以后多多支持3672js教程!
您可能感兴趣的文章:- 关于spring.factories失效原因分析及解决
- 浅谈spring.factories文件的作用
- 在SpringBoot3中spring.factories配置不起作用的原因和解决方法
- SpringBoot之spring.factories的使用方式
- 关于spring.factories的常用配置项说明
用户点评