本篇文章给大家分享的是有关@ConfigurationProperties怎么在Spring Boot2.0中使用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。

专注于为中小企业提供成都网站制作、网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业武鸣免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
配置项目POM
在pom.xml中定义Spring-Boot 为parent
org.springframework.boot spring-boot-starter-parent 2.0.4.RELEASE 
添加依赖
- 添加web,因为我们需要使用到JSR-303规范的Validator,如果不想使用web依赖,也可以直接依赖hibernate-validator 
- 添加spring-boot-configuration-processor,可以在编译时生成属性元数据(spring-configuration-metadata.json). 
- 添加lombok,可以方便使用注释处理器的功能省去Pojo定义中get set这些麻烦工作. 
org.springframework.boot spring-boot-starter-web org.projectlombok lombok org.springframework.boot spring-boot-configuration-processor true 
例子编写
首先定义一个DocumentServerProperties对象,下面这个文档服务器配置是我假设的,主要是为了演示属性配置的大部分情况
@Getter
@Setter
public class DocumentServerProperties {
  private String remoteAddress;
  private boolean preferIpAddress;
  private int maxConnections=0;
  private int port;
  private AuthInfo authInfo;
  private List whitelist;
  private Map converter;
  private List defaultShareUsers;
  @Getter
  @Setter
  public static class AuthInfo {
    private String username;
    private String password;
  }
}   绑定属性配置
注意@ConfigurationProperties并没有把当前类注册成为一个Spring的Bean,下面介绍@ConfigurationProperties配置注入的三种方式.
配合@Component注解直接进行注入
@ConfigurationProperties(prefix = "doc")
@Component
public class DocumentServerProperties {
  //代码...
}使用@EnableConfigurationProperties,通常配置在标有@Configuration的类上,当然其他@Component注解的派生类也可以,不过不推荐.
@ConfigurationProperties(prefix = "doc")
public class DocumentServerProperties {
  //代码...
}@EnableConfigurationProperties
@Configuration
public class SomeConfiguration {
  private DocumentServerProperties documentServerProperties
    
  public SomeConfiguration(DocumentServerProperties documentServerProperties) {
    this.documentServerProperties = documentServerProperties;
  }
}使用@Bean方式在标有@Configuration的类进行注入,这种方式通常可以用在对第三方类进行配置属性注册
@Configuration
public class SomeConfiguration {
  
  @Bean
  public DocumentServerProperties documentServerProperties(){
    return new DocumentServerProperties();
  }
  
  @ConfigurationProperties("demo.third")
  @Bean
  public ThirdComponent thirdComponent(){
    return new ThirdComponent();
  }
}编写配置文件
Spring-Boot中配置文件的格式有properties和yaml两种格式,针对上面的配置对象分别写了两种格式的配置文件例子.
Properties
doc.remote-address=127.0.0.1 doc.port=8080 doc.max-connections=30 doc.prefer-ip-address=true #doc.whitelist=192.168.0.1,192.168.0.2 # 这种等同于下面的doc.whitelist[0] doc.whitelist[1] doc.whitelist[0]=192.168.0.1 doc.whitelist[1]=192.168.0.2 doc.default-share-users[0].name=jack doc.default-share-users[0].age=18 doc.converter.a=xxConverter doc.converter.b=xxConverter doc.auth-info.username=user doc.auth-info.password=password
Yaml
doc: remote-address: 127.0.0.1 port: 8080 max-connections: 30 prefer-ip-address: true whitelist: - 192.168.0.1 - 192.168.0.2 default-share-users: - name: jack age: 18 converter: a: aConverter b: bConverter auth-info: username: user password: password
在上面的两个配置文件中,其实已经把我们平常大部分能使用到的属性配置场景都覆盖了,可能还有一些特殊的未介绍到,比如Duration、InetAddress等。
增加属性验证
下面我们利用JSR303规范的实现对DocumentServerProperties属性配置类,添加一些常规验证,比如Null检查、数字校验等操作,
需要注意在Spring-Boot 2.0版本以后,如果使用JSR303对属性配置进行验证必须添加@Validated注解,使用方式如下片段:
@ConfigurationProperties(prefix = "doc")
@Validated
public class DocumentServerProperties {
  @NotNull // 判断不为空的情况
  private String remoteAddress;
  
  //限制端口只能是80-65536之间
  @Min(80)
  @Max(65536)
  private int port;
  //其他代码
}在有些数情况下,我们希望自定义验证器,有两种方式可以进行实现
实现org.springframework.validation.Validator接口,并且在配置一个Bean名称必须叫configurationPropertiesValidator,代码如下:
public class UserLoginValidator implements Validator {
  private static final int MINIMUM_PASSWORD_LENGTH = 6;
  public boolean supports(Class clazz) {
    return UserLogin.class.isAssignableFrom(clazz);
  }
  public void validate(Object target, Errors errors) {
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "userName", "field.required");
    ValidationUtils.rejectIfEmptyOrWhitespace(errors, "password", "field.required");
    UserLogin login = (UserLogin) target;
    if (login.getPassword() != null
       && login.getPassword().trim().length() < MINIMUM_PASSWORD_LENGTH) {
     errors.rejectValue("password", "field.min.length",
        new Object[]{Integer.valueOf(MINIMUM_PASSWORD_LENGTH)},
        "The password must be at least [" + MINIMUM_PASSWORD_LENGTH + "] characters in );
    }
  }
}和上面一样也是实现org.springframework.validation.Validator接口,不过是需要验证的属性配置类本身去实现这个接口
@ConfigurationProperties(prefix = "doc")
public class DocumentServerProperties implements Validator{
  @NotNull
  private String remoteAddress;
  private boolean preferIpAddress;
    //其他属性 
  
  @Override
  public boolean supports(Class> clazz) {
    return true;
  }
  @Override
  public void validate(Object target, Errors errors) {
    //判断逻辑其实可以参照上面的代码片段
  }
}特别注意:
- 只有在需要使用JSR303规范实现的验证器时,才需要对对象配置@Validated,刚刚上面两种方式并不需要。 
- 第一种实现和第二种实现都是实现org.springframework.validation.Validator接口,但是前者是针对全局的,后者只针对实现这个接口的配置对象 
关于上述两点,我为啥确定? 来自ConfigurationPropertiesBinder的源码片段
private ListgetValidators(Bindable> target) { List validators = new ArrayList<>(3); if (this.configurationPropertiesValidator != null) { validators.add(this.configurationPropertiesValidator); } if (this.jsr303Present && target.getAnnotation(Validated.class) != null) { validators.add(getJsr303Validator()); } if (target.getValue() != null && target.getValue().get() instanceof Validator) { validators.add((Validator) target.getValue().get()); } return validators; } 
以上就是@ConfigurationProperties怎么在Spring Boot2.0中使用,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注创新互联行业资讯频道。
分享题目:@ConfigurationProperties怎么在SpringBoot2.0中使用
标题网址:http://www.cqwzjz.cn/article/ppojeg.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 