ConfigurationProperties,@ConditionalOnClass,@EnableConfigurationProperties,@PropertiesSource

本文详细解析了SpringBoot中@ConfigurationProperties如何从application.properties读取配置,并利用@ConditionalOnClass和@ConditionalOnMissingBean注解实现条件化加载配置。通过@EnableConfigurationProperties将配置属性映射到MongoProperties,并在Mongo.class存在时自动配置MongoAutoConfiguration。同时,介绍了依赖spring-boot-configuration-processor的作用。

我们还可以通过@ConfigurationProperties 读取application属性配置文件中的属性。

@ConfigurationProperties (prefix =  "spring.data.mongodb" )
publicclass MongoProperties {
  
     private  String host;
     privateint port = DBPort.PORT;
     private  String uri =  "mongodb://localhost/test" ;
     private  String database;
  
     // ... getters/ setters omitted
}

@ConditionOnClass表明该@Configuration仅仅在一定条件下才会被加载,这里的条件是Mongo.class位于类路径上

· @EnableConfigurationProperties将Spring Boot的配置文件(application.properties)中的spring.data.mongodb.*属性映射为MongoProperties并注入到MongoAutoConfiguration中。

· @ConditionalOnMissingBean说明Spring Boot仅仅在当前上下文中不存在Mongo对象时,才会实例化一个Bean。这个逻辑也体现了Spring Boot的另外一个特性——自定义的Bean优先于框架的默认配置,我们如果显式的在业务代码中定义了一个Mongo对象,那么Spring Boot就不再创建。

Configuration
@ConditionalOnClass (Mongo. class )
@EnableConfigurationProperties (MongoProperties. class )
publicclassMongoAutoConfiguration {
  
     @Autowired
     private  MongoProperties properties;
  
}

以上这个配置需要加入依赖:

< dependency >
< groupId >org.springframework.boot</ groupId >
< artifactId >spring-boot-configuration-processor</ artifactId >
< optional >true</ optional >
</ dependency >

通过@PropertiesSource读取配置文件中的属性
在这里插入图片描述
在这里插入图片描述

### @Value - **常见使用方法**:在属性上使用,用于获取环境变量中的值。可以设置默认值,格式为 `${属性名:默认值}`。若不设置默认值,获取不到该值时会报错。示例代码如下: ```java import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class MyConfig { @Value("${server.port:80}") String port; } ``` - **使用场景**:适用于需要获取单个配置属性值的场景,比如获取服务器端口、数据库连接地址等少量配置信息 [^4]。 ### @ConfigurationProperties - **常见使用方法**:使用 `@ConfigurationProperties(prefix = "前缀")` 注解,将 `application.properties` 或 `application.yml` 中以指定前缀开头的配置属性值注入到对应的 Java 类字段中。示例如下: ```java import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; @Component @ConfigurationProperties(prefix = "greeting") public class GreetingProperties { private String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } } ``` - **使用场景**:当需要批量绑定配置属性时,将相关配置集中管理在一个 Java 类中,方便统一维护和使用。例如,将数据库连接的多个配置项(如用户名、密码、URL 等)绑定到一个类中 [^2]。 ### @PropertySource - **常见使用方法**:用于指定自定义的配置文件路径,加载指定的配置文件。可以在配置类上使用,示例如下: ```java import org.springframework.context.annotation.PropertySource; import org.springframework.context.annotation.Configuration; @Configuration @PropertySource("classpath:custom.properties") public class CustomConfig { // 配置类相关内容 } ``` - **使用场景**:当项目中除了默认的 `application.properties` 或 `application.yml` 文件外,还有其他自定义的配置文件时,使用该注解可以加载这些额外的配置文件。 ### @EnableConfigurationProperties - **常见使用方法**:在配置类上使用,用于启用配置属性绑定功能,指定需要绑定的配置属性类。示例如下: ```java import org.springframework.context.annotation.Configuration; import org.springframework.boot.context.properties.EnableConfigurationProperties; @Configuration @EnableConfigurationProperties(NacosConfigProperties.class) public class NacosConfigAutoConfiguration { // 配置类相关内容 } ``` - **使用场景**:当使用 `@ConfigurationProperties` 注解将配置属性绑定到 Java 类后,需要使用 `@EnableConfigurationProperties` 来启用这些绑定,使配置属性生效。例如在自动配置类中启用自定义的配置属性类 [^1]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值