SpringBoot使用spring.factories加载默认配置的实现代码
更新时间:2024年06月24日 09:43:07 作者:code2roc
在日常开发过程中,发布一些产品或者框架时,会遇到某些功能需要一些配置才能正常运行,这时我们需要的提供默认配置项,同时用户也能覆盖进行个性化
在日常开发过程中,发布一些产品或者框架时,会遇到某些功能需要一些配置才能正常运行,这时我们需要的提供默认配置项,同时用户也能覆盖进行个性化
创建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加载配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
java web FTPClient实现上传文件到指定服务器
这篇文章主要为大家详细介绍了java web FTPClient实现上传文件到指定服务器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2018-06-06Spring Boot集成ShedLock分布式定时任务的实现示例
ShedLock确保您计划的任务最多同时执行一次。如果一个任务正在一个节点上执行,则它会获得一个锁,该锁将阻止从另一个节点(或线程)执行同一任务。2021-05-05
最新评论