@ConditionalOnProperty注解和@ConfigurationProperties注解

news/2024/7/24 8:34:44 标签: spring boot

@ConditionalOnProperty注解

@ConditionalOnProperty注解的作用是根据配置文件中的属性值来决定是否启用某个组件或功能。可以用于根据配置文件中的属性值来决定是否启用某个Bean或配置。

示例代码

@Configuration
@ConditionalOnProperty(prefix = "myconfig", value = "enabled", havingValue = "true", matchIfMissing = false)
public class MyConfig {
    // 定义Bean
}

@ConditionalOnProperty注解的作用是根据配置文件中的myconfig.enabled属性值来决定是否启用MyConfig配置类中的Bean定义。如果myapp.enabled属性值为true,则启用该配置类中的Bean定义;如果myconfig.enabled属性值为false,则不启用该配置类中的Bean定义。如果myconfig.enabled属性值不存在,则默认不启用该配置类中的Bean定义。


@ConfigurationProperties注解

@ConfigurationProperties注解是Spring Boot中用于绑定配置属性的注解,它可以将配置文件中的属性值绑定到Java对象的属性上。下面是@ConfigurationProperties注解的几种使用场景

场景一

使用@ConfigurationProperties和@Component注解到bean定义类上,这里@Component代指同一类实例化Bean的注解。

// 将类定义为一个bean的注解,比如 @Component,@Service,@Controller,@Repository
// 或者 @Configuration
@Component
// 表示使用配置文件中前缀为stu1的属性的值初始化该bean定义产生的的bean实例的同名属性
// 在使用时这个定义产生的bean时,其属性name会是Lucifer
@ConfigurationProperties(prefix = "stu1")
@Data
public class StudentConfig {
	private String name;
}

application.properties配置文件中:

stu1.name=Lucifer

场景二

使用@ConfigurationProperties和@Bean注解在配置类的Bean定义方法上。以数据源配置为例:

@Configuration
public class DataSourceConfig {

	@Primary
	@Bean(name = "primaryDataSource")
	@ConfigurationProperties(prefix="spring.datasource.primary")
	public DataSource primaryDataSource() {
		return DataSourceBuilder.create().build();
	}
}

将前缀为“spring.datasource.primary”的属性,赋值给DataSource对应的属性值。

@Configuration注解的配置类中通过@Bean注解在某个方法上将方法返回的对象定义为一个Bean,并使用配置文件中相应的属性初始化该Bean的属性。

场景三

使用@ConfigurationProperties注解到普通类,然后再通过@EnableConfigurationProperties定义为Bean。

@ConfigurationProperties(prefix = "stu1")
@Data
public class StudentConfig {
	private String name;
}

这里Student对象没有使用@Component相关注解。

Student类对应的使用形式如下:

@SpringBootApplication
@EnableConfigurationProperties({StudentConfig.class})
public class Application {
    public static void main(String[] args) throws Exception {
        SpringApplication.run(Application.class, args);
    }
}

或者在@Configuration的配置类上加@EnableConfigurationProperties({StudentConfig.class})

就可以使用

 @Autowired
 StudentConfig studentConfig;

参考博客:https://blog.csdn.net/wo541075754/article/details/104575745


http://www.niftyadmin.cn/n/5025234.html

相关文章

Dokcer搭建Apache Guacamole堡垒机

一、什么是堡垒机 “堡垒机” 这个词通常指的是 “堡垒机器”(Bastion Host)的简称。堡垒机是一种计算机系统或网络设备,用于增强计算机网络的安全性。它在网络中充当一个重要的安全关口,通过限制对内部网络的访问,帮…

vue的由来、vue教程和M-V-VM架构思想、vue的使用、nodejs

vue vue的由来 vue教程和M-V-VM架构思想 vue的使用 nodejs vue的由来 # 1 HTML(5)、CSS(3)、JavaScript(ES5、ES6、ES11):编写一个个的页面 -> 给后端(PHP、Python、Go、Java) -> 后端嵌入模板语法 -> 后端渲染完数据 -> 返回数据给前端 -> 在浏览…

LeetCode-746-使用最小花费爬楼梯-动态规划

题目描述: 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你计算并返回达到楼梯顶部的最低花费…

【算法与数据结构】701、LeetCode二叉搜索树中的插入操作

文章目录 一、题目二、解法三、完整代码 所有的LeetCode题解索引,可以看这篇文章——【算法和数据结构】LeetCode题解。 一、题目 二、解法 思路分析:这道题关键在于分析插入值的位置,不论插入的值是什么(插入值和原有树中的键值都…

postman连接websocket, 建立连接、聊天测试(v8.5.1)

1. postman v8.5版本 以上支持 websocket。 2. 选择websocket请求模块File - New... 3. WebSocketServer.java import org.springframework.stereotype.Component; import javax.websocket.*; import javax.websocket.server.PathParam; import javax.websocket.server.Server…

在 Vue 的 mounted 钩子函数中使用异步函数是否会有风险需要考虑

主要的区别在于: 异步函数 - 使用 await,执行时不会blocking,但获取数据时组件已渲染 同步函数 - 直接返回数据,组件渲染需等待执行结束 使用异步函数的潜在风险: 如果异步请求时间过长,组件会先渲染,导致页面空白或显示不正确 获取数据失败时,无法准确得到失败信息来源 同步…

学点Selenium玩点新鲜~新的一年,让分布式测试有更多玩法

我们都知道 Selenium 是一款在 Web 应用测试领域使用的自动化测试工具,而 Selenium Grid 是 Selenium 中的一大组件,通过它能够实现分布式测试,能够帮助团队简单快速在不同的环境中测试他们的 Web 应用。 分布式执行测试其实并不是一个非常难…