下面我将为您详细讲解“迅速学会@ConfigurationProperties的使用操作”的完整攻略。
什么是@ConfigurationProperties
@ConfigurationProperties是Spring Boot提供的一种读取properties配置文件的注解。通过在类上添加此注解,可以将属性值自动绑定到该类的对应字段上,并且可以对属性值进行校验和自动装配等操作。
如何使用@ConfigurationProperties
使用@ConfigurationProperties只需要两个步骤:
- 创建一个类,用于存储要读取的属性及其对应的值,并使用@ConfigurationProperties注解标注该类。
@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
private String title;
private String description;
// getter和setter方法略
}
- 在application.properties文件中设置要读取的属性值,并将该类注入到Spring容器中即可使用。
example.title=example-title
example.description=example-description
@RestController
@EnableConfigurationProperties(ExampleProperties.class)
public class ExampleController {
private final ExampleProperties exampleProperties;
@Autowired
public ExampleController(ExampleProperties exampleProperties) {
this.exampleProperties = exampleProperties;
}
@GetMapping("/example")
public String example() {
return String.format("title: %s, description: %s",
exampleProperties.getTitle(), exampleProperties.getDescription());
}
}
高级用法
除了基本用法外,@ConfigurationProperties还可以进行一些高级操作,例如:
类型安全的读取配置
通过在配置类的字段上添加@Valid或@Validated注解,可以对配置的字段进行类型校验,确保属性值的类型与配置类中的类型匹配。
@ConfigurationProperties(prefix = "example")
@Validated
public class ExampleProperties {
@Pattern(regexp = "^\\d{11}$", message = "手机号格式不正确")
private String phone;
// getter和setter方法略
}
example.phone=12345678901
复杂属性的读取配置
对于复杂的属性,我们可以使用NestedConfigurationProperty注解,将其封装成一个嵌套类,从而实现更加灵活的配置。
@ConfigurationProperties(prefix = "example")
public class ExampleProperties {
private String title;
private String description;
private Author author;
// getter和setter方法略
public static class Author {
private String name;
private String email;
// getter和setter方法略
}
}
example.title=example-title
example.description=example-description
example.author.name=example-author-name
example.author.email=example-author-email
配置属性的加载顺序
在多个配置文件中,可能存在同名的属性,在读取属性时,Spring Boot会按照固定的顺序进行读取。
- 命令行参数
- System.getProperties()中的属性
- OS环境变量中的属性
- 随机值
- application.properties或application.yml({@link ApplicationContext} 启动后被载入的外部属性源)
- @PropertySource 注解声明的配置文件
- 通过Spring的接口Environment.getAdditionalPropertySources()方法添加的额外属性源
示例说明
下面我们通过两个示例说明@ConfigurationProperties的使用方法:
示例一:读取单一属性
- 创建一个应用,引入依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.5</version>
</dependency>
</dependencies>
- 创建一个配置类SinglePropertyProperties.java:
@ConfigurationProperties(prefix = "single.property")
public class SinglePropertyProperties {
private String value;
// getter和setter方法略
}
- 在application.properties文件中添加配置:
single.property.value=example value
- 创建一个web控制器SinglePropertyController.java:
@RestController
@EnableConfigurationProperties(SinglePropertyProperties.class)
public class SinglePropertyController {
private final SinglePropertyProperties singlePropertyProperties;
@Autowired
public SinglePropertyController(SinglePropertyProperties singlePropertyProperties) {
this.singlePropertyProperties = singlePropertyProperties;
}
@GetMapping("/single-property")
public String singleProperty() {
return singlePropertyProperties.getValue();
}
}
- 启动应用,访问http://localhost:8080/single-property可以看到反馈“example value”,即说明读取单一属性成功。
示例二:读取嵌套属性
- 创建一个应用,引入依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.5.5</version>
</dependency>
</dependencies>
- 创建一个配置类NestedProperties.java:
@ConfigurationProperties(prefix = "nested.property")
public class NestedProperties {
private String parentValue;
private ChildProperties child;
// getter和setter方法略
public static class ChildProperties {
private String childValue;
// getter和setter方法略
}
}
- 在application.properties文件中添加配置:
nested.property.parent-value=example parent value
nested.property.child.child-value=example child value
- 创建一个web控制器NestedController.java:
@RestController
@EnableConfigurationProperties(NestedProperties.class)
public class NestedController {
private final NestedProperties nestedProperties;
@Autowired
public NestedController(NestedProperties nestedProperties) {
this.nestedProperties = nestedProperties;
}
@GetMapping("/nested-property")
public String nestedProperty() {
return String.format("parentValue: %s, childValue: %s",
nestedProperties.getParentValue(), nestedProperties.getChild().getChildValue());
}
}
- 启动应用,访问http://localhost:8080/nested-property可以看到反馈“parentValue: example parent value, childValue: example child value”,即说明读取嵌套属性成功。
通过以上例子,您应该已经掌握了@ConfigurationProperties的基本使用和高级用法,可以通过读取外部properties属性来动态配置应用程序了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:迅速学会@ConfigurationProperties的使用操作 - Python技术站