SpringBoot使用spring.config.import

作者: 恒宇少年 | 来源:发表于2022-04-10 11:16 被阅读0次

    简介

    SpringBoot从2.4.x版本开始支持了导入文件的方式来加载配置参数,与spring.config.additional-location不同的是不用提前设置而且支持导入的文件类型相对来说要丰富很多。

    我们只需要在application.properties/application.yml配置文件中通过spring.config.import属性配置需要导入的文件列表即可。

    通过spring.config.import属性支持导入多种途径的配置文件,下面简单介绍几种。

    导入classpath下的配置文件

    可以导入classpath下任意目录的文件,使用方式如下所示:

    spring:
      config:
        import:
        # 导入classpath下default目录下的default.properties配置文件
        - classpath:/default/default.properties
        # 导入classpath下service目录下的service.yml配置文件
        - classpath:/service/service.yml
    

    src/main/resource下分别创建defaultservice目录,在default目录下创建default.properties、在service目录下创建sevice.yml

    通过上面配置的属性导入后我们直接就可以在项目中通过@ConfigurationProperties@Value来注入使用。

    src/main/resourcesrc/main/java目录编译后都会到classpath根目录下。

    // default.properties
    default.password=111111
    // service.yml
    service:
      id: example
      port: 9999
      index-path: /index
    
    // default.properties
    @Value("${default.password}")
    private String defaultPassword;
    ---
    // service.yml
    @Configuration
    @ConfigurationProperties(prefix = "service")
    @Data
    public class ServiceProperties {
        private String id;
        private int port;
        private String indexPath;
    }
    

    导入系统目录下的配置文件

    可以导入操作系统目录下的配置文件,我在/Users/yuqiyu/Downloads目录下创建了名为system.properties的文件,导入方式如下所示:

    spring:
      config:
        import:
        # 导入系统目录/Users/yuqiyu/Downloads下的system.properties配置文件
        - optional:/Users/yuqiyu/Downloads/system.properties
    

    使用@ConfigurationProperties方式注入映射如下所示:

    // system.properties
    system.os=osx
    system.jdk-version=11
    
    // SystemProperties.java
    @Data
    @Configuration
    @ConfigurationProperties(prefix = "system")
    public class SystemProperties {
        private String os;
        private String jdkVersion;
    }
    

    导入Nacos配置中心的配置文件

    NacosSpringCloud Alibaba发布了2021.0.1.0版本后对spring.config.import做了支持,可以直接通过加载Nacos Server内指定的配置文件。

    首先我们使用Docker来创建一个Nacos Server容器,步骤如下所示:

    # 拉取nacos-server镜像
    docker pull nacos/nacos-server
    # 创建并启动nacos-server容器
    docker run --name nacos-quick -e MODE=standalone -p 8848:8848 -p 9848:9848 -d nacos/nacos-server:latest
    

    访问http://localhost:8848/nacos,使用默认账号nacos登录后在public命名空间下创建一个名为spring-config-import-example.yamlYAML格式的配置文件,内容如下所示:

    config:
        source: nacos
    

    SpringBoot项目中如果需要集成nacos,可以直接添加spring-cloud-starter-alibaba-nacos-config依赖,如下所示:

    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      <version>2021.0.1.0</version>
    </dependency>
    

    导入方式如下所示:

    spring:
      cloud:
        nacos:
          server-addr: localhost:8848
      config:
        import:
        # 导入nacos配置中心的配置文件
        - optional:nacos:spring-config-import-example.yaml
    

    在项目中同样可以使用@ConfigurationProperties@Value来注入配置参数,如下所示:

    @Value("${config.source}")
    private String configSource;
    

    总结

    spring.config.import使用方式是多样化的,如果你需要自定义导入的方式,可以借鉴nacos对其实现的部分代码。

    相关文章

      网友评论

        本文标题:SpringBoot使用spring.config.import

        本文链接:https://www.haomeiwen.com/subject/crrvsrtx.html