@ConditionalOnProperty和@ConfigurationProperties的使用

这两个注解都跟配置属性值有关,一个是用来做判断条件,一个是用来使用配置文件的属性值。

@ConditionalOnProperty

有时候我们需要根据某些配置来控制配置类是否生效,例如生成Token的实现类我们有两种实现类的Bean,一种基于redis,一种基于JDBC,我们想根据配置决定项目启动后使用的是哪一种bean,这时候我们就可以使用@ConditionalOnProperty注解来控制@bean注解是否生效

下面的代码理解为:

当配置文件中 security.oauth2.token.store前缀下的type属性为jdbc时,第一个@Bean生效;type属性为redis时,第二个@Bean生效

@Configuration
public class TokenStoreConfigNew {
	@Bean
	@ConditionalOnProperty(prefix="security.oauth2.token.store",name="type" ,havingValue="jdbc" ,matchIfMissing=false)
	public JdbcTokenStore jdbcTokenStore(){
 
		return new JdbcTokenStore( dataSource ) ;

	}
	
	@Bean
	@ConditionalOnProperty(prefix="security.oauth2.token.store",name="type" ,havingValue="redis" ,matchIfMissing=true)
	public RedisTemplateTokenStore redisTokenStore(RedisConnectionFactory connectionFactory){
		Assert.state(connectionFactory != null, "connectionFactory must be provided");
		RedisTemplateTokenStore redisTemplateStore = new RedisTemplateTokenStore(connectionFactory)  ;
		return redisTemplateStore ;
		 

	}
}

 

@ConfigurationProperties

在应用中要是用yml或Properties文件中定义的属性值,有很多方式。常见的就是使用@Value注解绑定值,这种对java字段和配置文件中的字段没有统一要求,但是属性太多的话比较繁琐。

我们可以使用@ConfigurationProperties注解方便快捷的把配置文件中的属性与java类中的属性做绑定。其对应的bean的后置处理器为ConfigurationPropertiesBindingPostProcessor

如下定义一个类,要求:

1类属性名称要与配置文件中的字段名字相同。

2.提供set方法。

3.使用@ConfigurationProperties注解指定配置文件属性字段前缀

4.把类定义为bean组件(添加@Component或者自己配置一个@Bean都可以),或者在使用@EnableConfigurationProperties注解扫描生效

这样就可以绑定值了。

package com.fk.demo;

import org.springframework.boot.context.properties.ConfigurationProperties;

@Component
@ConfigurationProperties(prefix = "Property")
public class Property {

    private String id;

    public void setId(String id) {
        this.id = id;
    }
 public void getId() {
        return id;
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WannaRunning

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值