您的位置:

如何使用@ConfigurationProperties注解配置属性

一、什么是@ConfigurationProperties注解

@ConfigurationProperties注解是Spring Boot提供的一种绑定自定义属性的方式。使用该注解可以将属性文件中的属性值绑定到Java对象上,从而方便的使用这些属性值。

在Spring Boot中,通常有两种类型的属性文件:application.properties和application.yml。通过@ConfigurationProperties注解可以将属性文件中的属性值绑定到Java Bean上,然后使用该Bean来读取属性值。

二、如何使用@ConfigurationProperties注解

使用@ConfigurationProperties注解绑定属性值的过程非常简单,只需要在Java Bean中添加@ConfigurationProperties注解,并指定属性文件中属性的前缀即可。

@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
    private String name;
    private String description;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

在上面的示例中,@ConfigurationProperties注解的prefix属性值为“example”,因此Bean中的属性就会自动绑定以“example.”开头的属性值。

另外,在使用@ConfigurationProperties注解时还需要加入@Component或@Configuration注解,让Spring Boot能够扫描该Bean并创建相应的实例。

三、绑定属性值的方式

在@ConfigurationProperties注解中,可以通过以下几种方式来绑定属性值:

1、直接绑定

直接将属性值绑定到Java Bean的属性上。

@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
    private String name;
    private String description;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

2、使用@Value注解绑定

使用@Value注解将属性值绑定到Java Bean的属性上。

@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
    @Value("${example.name}")
    private String name;
    @Value("${example.description}")
    private String description;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

3、使用Constructor Binding绑定

使用Constructor Binding将属性值绑定到Java Bean的构造函数入参中。

@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
    private String name;
    private String description;

    public ExampleProperties(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

在使用Constructor Binding时,需要添加一个带有@Configuration的配置类,并在该类中使用@ConfigurationPropertiesScan注解指定要扫描的Java Bean。

@Configuration
@ConfigurationPropertiesScan(basePackageClasses = ExampleProperties.class)
public class ExampleConfiguration {
}

四、属性值校验

在@ConfigurationProperties中,可以使用JSR-303 Bean Validation机制对属性值进行校验。

@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
    @NotEmpty
    private String name;
    @NotBlank
    private String description;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

在上面的示例中,使用了@NotEmpty和@NotBlank注解对属性值进行了校验,如果值为空则会抛出异常。

五、总结

本文详细介绍了如何使用@ConfigurationProperties注解绑定属性值,并且围绕该注解展开了多个方面的讲解,包括如何使用三种不同方式绑定属性值以及如何进行属性值校验等。通过学习本文,读者不仅了解了@ConfigurationProperties注解的使用方法,更可以通过该注解快速、方便地管理应用程序中的属性值。