基于@ConfigurationProperties+@EnableConfigurationProperties的配置管理-笔记
1. 功能简介
@ConfigurationProperties
和 @EnableConfigurationProperties
是 Spring Boot 中用于将配置文件(如 application.properties
或 application.yml
)中的属性绑定到 Java 对象的两个关键注解。它们共同实现了类型安全的配置管理,简化了对配置项的访问和管理。
@ConfigurationProperties
- 作用:将配置文件中以特定前缀开头的属性绑定到一个 Java Bean 上。
- 特点:
- 支持嵌套属性(多层级结构)。
- 支持松散绑定(如驼峰命名与下划线命名的自动转换)。
- 提供类型安全访问配置值。
- 使用方式:标注在 Java 类上,并通过
prefix
指定配置前缀。
@EnableConfigurationProperties
- 作用:启用配置属性绑定功能,告诉 Spring Boot 去注册带有
@ConfigurationProperties
注解的 Bean。没有该注解,即使有@ConfigurationProperties,Spring也不会自动创建Bean。 - 使用方式:标注在配置类或主应用类上,或通过参数指定具体配置类。
总结
注解 | 作用 | 必须搭配使用? |
---|---|---|
@ConfigurationProperties | 将配置绑定到 Java Bean | ✅ 是 |
@EnableConfigurationProperties | 启用配置属性绑定功能 | ✅ 是 |
通过这种方式,可以实现对配置的集中管理、类型安全访问,并且代码更清晰、可维护性更高。
2. 使用示例
2.1 常见用法
step1.定义配置属性类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;// 定义配置类
@Data
@ConfigurationProperties(prefix = "test.app")
public class AppProperties {private String name;private int timeout;
}
step2.启用配置属性
在主类或配置类上添加 @EnableConfigurationProperties
:
//方式一:在配置类添加
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@Configuration
@EnableConfigurationProperties(AppProperties.class)
public class AppConfig {
}//方式二:在主类添加
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}
}
step3.配置文件设置
在 application.properties
中添加配置:
//application.properties文件的配置内容
test.app.name=demoName
test.app.timeout=1000
step4.使用配置
在 Service 或 Controller 中注入并使用配置对象:
// 使用Bean
@Service
public class MyService {@Autowiredprivate AppProperties appProps; // 可获取配置属性值public void printConfig() {System.out.println("Name: " + appProps.getName());System.out.println("timeout: " + appProps.getTimeout());}
}
2.2 进阶用法
启用多个配置类:
step1.定义配置属性类
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;// 配置类1
@Data
@ConfigurationProperties(prefix = "test.app")
public class AppProperties {private String name;private int timeout;
}// 配置类2
@Data
@ConfigurationProperties(prefix = "database")
public class DatabaseConfig {private String url;private String username;private String password;
}
step2.启用配置属性
在配置类的 @EnableConfigurationProperties指明需要启用的多个配置类:
//在配置类添加
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.context.properties.EnableConfigurationProperties;@Configuration
@EnableConfigurationProperties(AppProperties.class,DatabaseConfig.class)
public class AppConfig {
}
step3.配置文件设置
在 application.properties
中添加配置:
//AppProperties对应的配置内容
test.app.name=demoName
test.app.timeout=1000//DatabaseConfig 对应的配置内容
database.url=jdbc:mysql://localhost:3306/mydb
database.username=root
database.password=secret
step4.使用配置
在 Service中注入并使用配置对象:
@Service
public class MyService {@Autowiredprivate AppProperties appProps; // 可获取配置属性值@Autowiredprivate DatabaseConfig databaseConfig; // 可获取配置属性值public void printConfig() {//打印appProps属性System.out.println("Name: " + appProps.getName());System.out.println("timeout: " + appProps.getTimeout());//打印databaseConfig属性System.out.println("url: " + databaseConfig.getUrl());System.out.println("username: " + databaseConfig.getUsername());System.out.println("password: " + databaseConfig.getPassword()); }
}
3. 相关文档
Spring中生成Bean的方式总结-笔记_通过properties资源配置生成bean-CSDN博客