美文网首页
Spring Boot 自定义配置详解(一)

Spring Boot 自定义配置详解(一)

作者: wuyuxiao | 来源:发表于2018-03-15 15:53 被阅读0次

    1.自定义配置

    最近在做Spring Boot相关的项目,项目中application.properties自定义配置信息是会经常用到的,自定义配置并不困难,有非常多的样例可以参考,例如:

    @ConfigurationProperties("example.service")
    @Component
    public class WrapServiceProperties {
        private String prefix;
        private String suffix;
    
        public String getPrefix() {
            return prefix;
        }
    
        public void setPrefix(String prefix) {
            this.prefix = prefix;
        }
    
        public String getSuffix() {
            return suffix;
        }
    
        public void setSuffix(String suffix) {
            this.suffix = suffix;
        }
    }
    

    经过以上注解配置(@Component是用于申明Bean,@ConfigurationProperties("example.service")申明这是一个自定义配置类,并且这个自定义类的配置前缀是example.service。
    完成了以上工作,我们就可以在application.properties中添加我们的自定义配置

    example.service.prefix=###
    example.service.suffix=@@@
    

    配置信息的名字注意和类属性保持一致,系统启动时spring就会将配置信息装配到我们的bean中。一切似乎非常完美,但是!但是!

    这时候我们去IDEA编辑一下我们的配置,发现!TMD居然你不提示自定的配置,看不起我们自定义配置???


    application.properties

    Spring内部的配置信息是都可以提示的,如果不能提示,使用的时候会非常不友好,敲配置信息容易出错,特别是你如果自定义starter给其他人用,别人完全无法知道哪些是可配置的信息。那么怎么去配置可提示的配置信息?

    2.IDEA可提示的自定义配置

    要让IDEA识别你自己的配置信息需要在maven中添加一个类库

            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-configuration-processor</artifactId>
                <optional>true</optional>
            </dependency>
    

    或者gradle

    dependencies {
        optional "org.springframework.boot:spring-boot-configuration-processor"
    }
    
    compileJava.dependsOn(processResources)
    

    这个类库会在编译时生效,作用就是生成自定义配置的元信息,IDEA提示会依赖这个文件,在添加这个类库后,我们尝试build一次项目


    项目构建结果

    spring-configuration-metadata.json即是自动生成的元信息文件,实际就是一个json
    注:spring.factories文件可以不管,并不是自定义配置生成的,这个是自定义starter需要用到的文件,后边我会讲到。

    {
      "hints": [],
      "groups": [
        {
          "sourceType": "wyx.practice.wrap.config.WrapServiceProperties",
          "name": "example.service",
          "type": "wyx.practice.wrap.config.WrapServiceProperties"
        }
      ],
      "properties": [
        {
          "sourceType": "wyx.practice.wrap.config.WrapServiceProperties",
          "name": "example.service.prefix",
          "type": "java.lang.String"
        },
        {
          "sourceType": "wyx.practice.wrap.config.WrapServiceProperties",
          "name": "example.service.suffix",
          "type": "java.lang.String"
        }
      ]
    }
    

    当然,我们不关心文件内部结构,想知道Json含义,有兴趣可以看看spring官方文档

    这时候,我们再去application.properties编辑一下,发现已经可以提示了


    application.properties

    相关文章:
    Spring Boot 自定义配置详解(二)

    相关文章

      网友评论

          本文标题:Spring Boot 自定义配置详解(一)

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