美文网首页
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