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加载配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot处理请求参数中包含特殊符号

    SpringBoot处理请求参数中包含特殊符号

    今天写代码遇到了一个问题,请求参数是个路径“D:/ExcelFile”,本文就详细的介绍一下该错误的解决方法,感兴趣的可以了解一下
    2021-06-06
  • jar包双击执行程序的方法

    jar包双击执行程序的方法

    这篇文章主要介绍了jar包双击执行程序的方法,可实现双击jar包直接执行Java程序的功能,具有一定的参考借鉴价值,需要的朋友可以参考下
    2014-12-12
  • java中pdf转图片的实现方法

    java中pdf转图片的实现方法

    下面小编就为大家带来一篇java中pdf转图片的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • Spring Boot 快速集成 Redis的方法

    Spring Boot 快速集成 Redis的方法

    这篇文章主要介绍了Spring Boot 如何快速集成 Redis,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Java Spring JdbcTemplate基本使用详解

    Java Spring JdbcTemplate基本使用详解

    JDBC已经能够满足大部分用户最基本的需求,但是在使用JDBC时,必须自己来管理数据库资源如:获取PreparedStatement,设置SQL语句参数,关闭连接等步骤
    2021-10-10
  • 浅谈Java中随机数的几种实现方式

    浅谈Java中随机数的几种实现方式

    这篇文章主要介绍了Java中随机数的几种实现方式,从最简单的Math.random到多线程的并发实现都在本文所列之中,需要的朋友可以参考下
    2015-07-07
  • 深入解析Java编程中的boolean对象的运用

    深入解析Java编程中的boolean对象的运用

    这篇文章主要介绍了Java编程中的boolean对象的运用,是Java入门学习中的基础知识,需要的朋友可以参考下
    2015-10-10
  • 将字符串数字格式化为样式1,000,000,000的方法

    将字符串数字格式化为样式1,000,000,000的方法

    这篇文章主要介绍了将字符串数字格式化为样式1,000,000,000的方法,有需要的朋友可以参考一下
    2014-01-01
  • 一文搞懂java反射基本API

    一文搞懂java反射基本API

    这篇文章主要为大家介绍了一文搞懂java反射基本API,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 微服务Spring Boot 整合Redis 阻塞队列实现异步秒杀下单思路详解

    微服务Spring Boot 整合Redis 阻塞队列实现异步秒杀下单思路详解

    这篇文章主要介绍了微服务Spring Boot 整合Redis 阻塞队列实现异步秒杀下单,使用阻塞队列实现秒杀的优化,采用异步秒杀完成下单的优化,本文给大家分享详细步骤及实现思路,需要的朋友可以参考下
    2022-10-10

最新评论