欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot自定义配置文件并读取(不需要写类和实现接口)

程序员文章站 2022-03-02 19:01:13
...

记录贴,由于一个项目中有用到大量的定义好的配置,可能会更改,于是想抽取到配置文件中,搜索良久,总算找到了一个相对满意的方法

前言

实现自定义配置文件的方法有那么几种:

  1. 利用@PropertySource注解来实现

需要写java bean,而且配置文件添加或者修改,也需要改,不方便

  1. 使用EnvironmentPostProcessor加载自定义配置文件

需要实现接口继承类,对于yml支持不好

以上两种方法参考此处


个人觉得,可以采用第三种方法,在application.yml配置,主要用到了spring.profile.include 或 spring.profile.active方法。
优点:很方便,就和直接在application.yml中一样。
缺点:配置名字无法自定义(只能是application-${filename} 但我觉得无伤大雅,本来Spring Boot就是约定大于配置,能自定义一部分名称,相信能满足大部分人的需求了)

首先要理解spring.profile.include 或 spring.profile.active

spring.profile.active:
    根据部署场景不同,切换不同的配置文件:配置spring.profiles.active,属性值为${profile}。
spring.profile.include:
	启用开发环境(主)配置文件时active时,同时启用spring.profiles.include属性配置其他的profile

active 我们常用来指定开发环境如:dev、test、prod等,因此我们只需要生效的配置下,指定include即可。
也就是如果在application-dev.yml下置顶的配置文件只会在dev下生效,重点来了application.yml的文件则会全局生效,所以我们可以采用这个特性,实现我们的诉求。

可惜没有*能够实现无论配置文件啥名字都能读取,以后要是有能力可以看看能不能实现下。

????例子如下

  1. application.yml 指定文件
    Spring Boot自定义配置文件并读取(不需要写类和实现接口)
  2. 配置文件位置及内容
    Spring Boot自定义配置文件并读取(不需要写类和实现接口)
    Spring Boot自定义配置文件并读取(不需要写类和实现接口)
    Spring Boot自定义配置文件并读取(不需要写类和实现接口)
  3. 读取测试
    @Value("${qq.test}")
    private String test;

    @Value("${home.test}")
    private String home;

    @GetMapping()
    public String loginUser() {
        return test +"------------" + home;
    }

Spring Boot自定义配置文件并读取(不需要写类和实现接口)

完美!