中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

springboot~ConditionalOnProperty注(zhu)解的使用

@ConditionalOnProperty注釋在(zai)類或者bean方法上進行控(kong)制這個(ge)bean對象(xiang)是(shi)否被(bei)注冊,它(ta)是(shi)否被(bei)注冊,完成依賴于(yu)ConditionalOnProperty里的value的值,為true時,表(biao)示被(bei)注冊,為false表(biao)示不注冊這個(ge)bean。而我們通過matchIfMissing來配置(zhi)這個(ge)value的缺省值,默認是(shi)false,即當你不配置(zhi)時,它(ta)是(shi)不會自(zi)動裝配的。

在組件中的使用

一 聲明一個配置類

@ConfigurationProperties("kc-kafka")
@Data
public class KafkaProperties {
  /**
   * 是否開啟kafka功能.
   */
  private Boolean enabled = true;
  /**
   * kafka生產者ack機制
   */
  private String acks = "1";

通過EnableConfigurationProperties開啟配置類,而當前類是否被注冊,依賴于kc-kafka.enabled的值,默認是裝配這個bean

matchIfMissing=true表示(shi)默認在不(bu)配(pei)置kc-kafak時(shi),它就(jiu)會(hui)裝(zhuang)配(pei)這個KafkaProviderConfig對象

@Configuration
@RequiredArgsConstructor
@ConditionalOnProperty(value = "kc-kafka.enabled", matchIfMissing = true)
@EnableConfigurationProperties(KafkaProperties.class)
public class KafkaProviderConfig {
  @Autowired
  KafkaProperties kafkaProperties;

  @Bean
  @ConditionalOnBean(DefaultKafkaProducerFactory.class)
  public KafkaTemplate<String, String> kafkaTemplate(DefaultKafkaProducerFactory<String, String> kafkaProducerFactory) {
    return new KafkaTemplate<>(kafkaProducerFactory, false);
  }
}

通過name和havingValue為控制bean的裝配

上面的(de)(de)matchIfMissing只控(kong)制(zhi)boolean類型的(de)(de)屬性,如果(guo)你希(xi)望通過字符串屬性來(lai)控(kong)制(zhi)bean的(de)(de)裝配,可以使用name和havingValue的(de)(de)組合。

@Configuration
@RequiredArgsConstructor
@ConditionalOnProperty(name= "kc-kafka.status", havingValue="1")
@EnableConfigurationProperties(KafkaProperties.class)

@ConditionalOnProperty和@ConditionalOnMissingBean一起使用的效果

  • MissingBean是一個接口,里面有個方法hello()
  • 有個默認的實現DefaultMissingBean,通過@ConditionalOnMissingBean進行聲明,當沒有其它MissingBean接口的bean時,會使用這個DefaultMissingBean
  • V1MissingBean是我們自定義的實現,它通過@ConditionalOnProperty來開啟是否裝配,如果它沒有裝備,spring就使用默認的DefaultMissingBean
  • test.v1.enabled在配置文件里,配置為true表示開啟 V1MissingBean,配置為false,表示不開啟它,而開啟默認的DefaultMissingBean

實例代碼

public interface MissingBean {

	void hello();

}
public class DefaultMissingBean implements MissingBean {

	@Override
	public void hello() {
		System.out.println("default MissingBean");
	}

}
@Configuration
public class MissingBeanConfig {

    /**
     * @ConditionalOnMissingBean當沒有其它MissingBean的bean時,就使用DefaultMissingBean這個bean. @return
     */
    @Bean
    @ConditionalOnMissingBean(MissingBean.class)
    public MissingBean defaultMissingBean() {
        return new DefaultMissingBean();
    }

}
  • v1MissingBean對象
@Component
@ConditionalOnProperty(value="test.v1.enabled",matchIfMissing = true)
public class V1MissingBean implements MissingBean {

	@Override
	public void hello() {
		System.out.println("v1 MissingBean");
	}

}
  • 關閉v1的配置
test:
  v1:
    enabled: false
  • 測試用例
	@Autowired
	MissingBean missingBean;


	/**
	 * @ConditionalOnMissingBean.
	 */
	@Test
	public void onMissingBean() {
		missingBean.hello();
	}
posted @ 2023-03-09 11:09  張占嶺  閱讀(1119)  評論(0)    收藏  舉報