springboot自定义外部扩展文件

简介: 在springboot启动的时候调用run方法,可以看到run方法里面的内容,其中有一个getRunListeners方法

在springboot启动的时候调用run方法,可以看到run方法里面的内容,其中有一个getRunListeners方法




Ctrl+左键点进这个方法,发现getSpringFactoriesInstances方法,这个方法就是在所有jar包的spring.factories文件中寻找指定类型的值



我们去springboot包里面的spring.factories文件搜索SpringApplicationRunListener



这个类的作用就是把application.yml配置文件中配置的内容加载在项目中,进入这个类可以看到它实现了SpringApplicationRunListener接口。



所以我们也可以创建一个类来实现这个接口,用来加载自己定义的配置文件。


创建一个my.properties,创建一个类MySpringApplicationRunListener类来实现SpringApplicationRunListener


实现里面的方法,在environmentPrepared方法中书写读取配置文件的代码

@Override
    public void environmentPrepared(ConfigurableEnvironment environment) {
        Properties properties = new Properties();
        try {
            //读取my.properties配置文件
            properties.load(this.getClass().getClassLoader().getResourceAsStream("my.properties"));
            //读取名称为my
            PropertySource propertySource = new PropertiesPropertySource("my", properties);
            //将资源添加到springboot项目中
            MutablePropertySources propertySources = environment.getPropertySources();
            propertySources.addLast(propertySource);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

然后在resources文件夹下创建一个META-INF文件夹,在里面创建一个spring.factories文件,把springboot包中刚才找到的那个配置copy过来,并且把下面的值改成自己的类路径



我们来创建一个方法测试一下


在my.properties 文件中写了一个键值对


myName=vhukze


在controller中获取一下


@Value("${myName}")
    private String myName;
    @RequestMapping("/")
    public String getMyName() {
        return myName;
    }

启动项目报错了



这个是报的一个反射异常,没有找到有参构造


再来看一下springboot中的那个EventPublishingRunListener类


这个里面是有一个这样的有参构造的,那我们也在自己的类里面添加一个



现在可以成功启动项目了,访问一下测试方法





如果想在application.yml配置文件之前加载,可以设置优先级,把我们的MySpringApplicationRunListener类再实现一个Ordered接口,实现里面的getOrder方法,设置返回值小于0,因为加载application配置文件的getOrder方法返回值是0;



在高版本的springboot中,我们实现自己的监听器中的environmentPrepared方法,已经不推荐使用了(中划线)


可以看一下我的另一篇博客:sprintboot读取自定义配置文件properties、yml、yaml,环境springboot2.4.4


如果读取ylm或者yaml配置文件也可以看看我上面的这篇博客


相关文章
|
2月前
|
安全 Java Spring
SpringBoot2 | SpringBoot监听器源码分析 | 自定义ApplicationListener(六)
SpringBoot2 | SpringBoot监听器源码分析 | 自定义ApplicationListener(六)
47 0
|
2月前
|
JavaScript 前端开发 Java
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
springboot整合minio+vue实现大文件分片上传,断点续传(复制可用,包含minio工具类)
453 0
|
18天前
|
前端开发 Java 应用服务中间件
Springboot对MVC、tomcat扩展配置
Springboot对MVC、tomcat扩展配置
|
1月前
|
Java 数据库 数据安全/隐私保护
【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制
【SpringBoot】Validator组件+自定义约束注解实现手机号码校验和密码格式限制
111 1
|
1天前
|
Java 数据安全/隐私保护 开发者
【SpringBoot】讲清楚日志文件&&lombok
【SpringBoot】讲清楚日志文件&&lombok
|
2天前
|
缓存 Java Sentinel
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
Springboot 中使用 Redisson+AOP+自定义注解 实现访问限流与黑名单拦截
|
1月前
|
SQL Java 数据库连接
springboot解析txt文件顺便加到数据库中(nohup文件)
springboot解析txt文件顺便加到数据库中(nohup文件)
112 1
|
1月前
|
存储 JavaScript 前端开发
Spring Boot + Vue: 实现文件导入导出功能
本文介绍了使用Spring Boot和Vue实现文件导入导出的步骤。在后端,Spring Boot通过`MultipartFile`接收上传文件,保存至服务器,并使用`ResponseEntity`提供文件下载。前端部分,Vue项目借助`axios`发送HTTP请求,实现文件选择、上传及下载功能。这种前后端分离的实现方式提高了应用的可维护性和可扩展性。
39 2
|
1月前
|
Java Nacos 数据安全/隐私保护
springboot使用configtree读取树形文件目录中的配置
springboot使用configtree读取树形文件目录中的配置
springboot使用configtree读取树形文件目录中的配置
|
1月前
|
XML 设计模式 Java
springboot创建并配置环境3 - 配置扩展属性(下)
springboot创建并配置环境3 - 配置扩展属性(下)
springboot创建并配置环境3 - 配置扩展属性(下)