这里给大家推荐一个spring boot的@ConfigurationProperties注解。@ConfigurationProperties
是一个spring boot注解,用于将配置文件中的属性值绑定到一个 Java 类中。它通常与 Spring Boot 应用程序一起使用,以简化配置文件的处理。
功能介绍:
- 属性绑定:
@ConfigurationProperties
可以将配置文件中的属性值绑定到一个 Java 类中的属性上。通过在类上添加该注解,可以指定要绑定的属性的前缀或名称,并自动将配置文件中对应的属性值赋值给类中的属性。 - 类型安全:通过属性绑定,
@ConfigurationProperties
提供了类型安全的方式来读取配置文件中的属性值。它允许将属性值直接绑定到正确的数据类型,而不需要手动进行类型转换。 - 自动装配:使用
@ConfigurationProperties
注解的类可以轻松地与 Spring Boot 的自动装配机制集成。当配置文件中的属性值被绑定到类的属性上后,可以通过依赖注入等方式在应用程序的其他组件中直接使用这些属性值。 - 属性验证:
@ConfigurationProperties
支持属性值的验证。可以通过在属性的 setter 方法上使用相应的验证注解,例如@NotNull
、@Min
、@Max
等,来确保属性值的有效性。 - 动态刷新:在 Spring Boot 中,使用
@ConfigurationProperties
绑定的属性值可以与 Spring 的动态刷新机制集成,以实现属性值的动态更新。通过使用@RefreshScope
注解,可以在属性值发生变化时刷新该类的实例。
总之,@ConfigurationProperties
提供了一种方便的方式来读取和绑定配置文件中的属性值,并提供了类型安全、自动装配、属性验证和动态刷新等功能,帮助简化配置文件的处理和使用。
(1).创建配置文件进行测试,D:\java\x2_sap_file_collect\src\main\resources\application.properties
##############################FTP配置信息###############################
ftp.host=192.168.0.93
ftp.port=21
ftp.username=sap
ftp.password=sap_2023_sap_gao
ftp.initial-size=3
ftp.encoding=UTF-8
ftp.buffer-size=8192
ftp.isopen=true
ftp.retry-count=5
ftp.work-dir=/
ftp.root=/
ftp.max-total=100
ftp.min-idel=2
ftp.max-idle=5
ftp.max-wait-millis=30000
ftp.enter-local-active-mode=false
(2).创建配置文件映射的类文件,D:\java\x2_sap_file_collect\src\main\java\com\x2_sap_collect\config\FtpConfig.java
package com.x2_sap_collect.config;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
@Component
@ConfigurationProperties(prefix = "ftp")
public class FtpConfig {
private String host;
private Integer port;
private String username;
private String password;
private Integer initialSize = 0;
private String encoding = "UTF-8";
private Integer bufferSize = 4096;
private Integer retryCount = 3;
private String root = "/";
private String workDir = "/";
private Integer maxTotal = 100;
private Integer minIdel = 2;
private Integer maxIdle = 5;
private Integer maxWaitMillis = 30000;
private Boolean enterLocalActiveMode = false;
private Integer connectTimeoutMillis = 30000;
public String getHost() {
return host;
}
public void setHost(String host) {
this.host = host;
}
public Integer getPort() {
return port;
}
public void setPort(Integer port) {
this.port = port;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public Integer getInitialSize() {
return initialSize;
}
public void setInitialSize(Integer initialSize) {
this.initialSize = initialSize;
}
public String getEncoding() {
return encoding;
}
public void setEncoding(String encoding) {
this.encoding = encoding;
}
public Integer getBufferSize() {
return bufferSize;
}
public void setBufferSize(Integer bufferSize) {
this.bufferSize = bufferSize;
}
public Integer getRetryCount() {
return retryCount;
}
public void setRetryCount(Integer retryCount) {
this.retryCount = retryCount;
}
public String getRoot() {
return root;
}
public void setRoot(String root) {
this.root = root;
}
public String getWorkDir() {
return workDir;
}
public void setWorkDir(String workDir) {
this.workDir = workDir;
}
public Integer getMaxTotal() {
return maxTotal;
}
public void setMaxTotal(Integer maxTotal) {
this.maxTotal = maxTotal;
}
public Integer getMinIdel() {
return minIdel;
}
public void setMinIdel(Integer minIdel) {
this.minIdel = minIdel;
}
public Integer getMaxIdle() {
return maxIdle;
}
public void setMaxIdle(Integer maxIdle) {
this.maxIdle = maxIdle;
}
public Integer getMaxWaitMillis() {
return maxWaitMillis;
}
public void setMaxWaitMillis(Integer maxWaitMillis) {
this.maxWaitMillis = maxWaitMillis;
}
public Boolean getEnterLocalActiveMode() {
return this.enterLocalActiveMode;
}
public void setEnterLocalActiveMode(Boolean enterLocalActiveMode) {
this.enterLocalActiveMode = enterLocalActiveMode;
}
public Integer getConnectTimeoutMillis() {
return connectTimeoutMillis;
}
public void setConnectTimeoutMillis(Integer connectTimeoutMillis) {
this.connectTimeoutMillis = connectTimeoutMillis;
}
}
(3).尝试使用配置信息,D:\java\x2_sap_file_collect\src\main\java\com\x2_sap_collect\task\V1.java
package com.x2_sap_collect.task;
import com.x2_sap_collect.config.FtpConfig;
import org.springframework.shell.standard.ShellComponent;
import org.springframework.shell.standard.ShellMethod;
@ShellComponent
public class V1 {
/**
* 配置信息
*/
private final FtpConfig fTpConfig;
/**
* 构造函数初始化配置
* @param fTpConfig
*/
public V1(FtpConfig fTpConfig) {
this.fTpConfig = fTpConfig;
}
@ShellMethod("Add two integers together.")
public int add(int a, int b) {
// 打印配置信息
System.out.println(fTpConfig.toString());
return a + b;
}
}
需要注意此注解需要maven依赖,坐标地址如下
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>