亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

關(guān)于@ConditionalOnProperty的作用及用法說明

 更新時間:2022年06月13日 14:13:18   作者:林先生拆坑日記。  
這篇文章主要介紹了關(guān)于@ConditionalOnProperty的作用及用法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

@ConditionalOnProperty作用及用法

在spring boot中有時候需要控制配置類是否生效,可以使用@ConditionalOnProperty注解來控制@Configuration是否生效.

通過其兩個屬性name以及havingValue來實現(xiàn)的,其中name用來從application.properties中讀取某個屬性值。

  • 如果該值為空,則返回false;
  • 如果值不為空,則將該值與havingValue指定的值進行比較,如果一樣則返回true;否則返回false。
  • 如果返回值為false,則該configuration不生效;為true則生效。

例子1

@Configuration
@ConditionalOnProperty(prefix = "filter",name = "loginFilter",havingValue = "true")
public class FilterConfig {
?? ?//prefix為配置文件中的前綴,
?? ?//name為配置的名字
?? ?//havingValue是與配置的值對比值,當兩個值相同返回true,配置類生效.
? ? @Bean
? ? public FilterRegistrationBean getFilterRegistration() {
? ? ? ? FilterRegistrationBean filterRegistration ?= new FilterRegistrationBean(new LoginFilter());
? ? ? ? filterRegistration.addUrlPatterns("/*");
? ? ? ? return filterRegistration;
? ? }
}

例子2

? ? @Bean
? ? @ConditionalOnProperty(name="spring.redis.host")
? ? RedissonClient redissonSingle() {
? ? ? ? Config config = new Config();
? ? ? ? SingleServerConfig serverConfig = config.useSingleServer()
? ? ? ? ? ? ? ? .setAddress("redis://" + redssionProperties.getHost() + ":" + redssionProperties.getPort())
? ? ? ? ? ? ? ? .setTimeout(redssionProperties.getTimeout())
? ? ? ? ? ? ? ? .setConnectionPoolSize(redssionProperties.getConnectionPoolSize())
? ? ? ? ? ? ? ? .setConnectionMinimumIdleSize(redssionProperties.getConnectionMinimumIdleSize());
? ? ? ? if(StringUtils.isNotBlank(redssionProperties.getPassword())) {
? ? ? ? ? ? serverConfig.setPassword(redssionProperties.getPassword());
? ? ? ? }
? ? ? ? return Redisson.create(config);
? ? }

@ConditionalOnProperty使用注意事項

前幾天使用@ConditionalOnProperty注解配置多個過濾器的過程中碰到了一個問題,在這里記錄下

先簡單介紹下@ConditionalOnProperty注解的功能吧,之后筆者再描述自身遇到的那些問題的時候,會更好理解一些

@ConditionalOnProperty的功能

它主要是通過自身的兩個屬性來控制自動配置是否生效,這兩個屬性分別是name、havingValue。只有當配置文件(application.properties或者bootstrap.yml)中和name相同的屬性的值和注解上havingValue的值相同時,該配置文件才會生效,如下方代碼:

配置類

@ConditionalOnProperty(value = "muyichen.auth.test", havingValue = "true")
@Component
public class AuthorizationFilterImpl implements AuthorizationFilter {
?? ?//具體的過濾邏輯
}

配置文件

muyichen.auth.test=true

使用過程中遇到的問題

當筆者嘗試給兩個以上的過濾器添加該屬性時,應(yīng)用程序啟動報錯,如下圖:

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method authorizationFilter in com.muyichen.demo.config.WebConfiguration required a single bean, but 2 were found:

造成這個問題的主要原因是:AuthorizationFilter是筆者自己定義的一個過濾器接口,它繼承了Filter接口,但并沒有做任何實現(xiàn),當servlet開始識別過濾器時,由于AuthorizationFilter接口并沒有做主從讀取邏輯的配置,所以servlet無法判別哪個是主要的過濾器配置,當幾個容器間的配置出現(xiàn)沖突時,無法判別以誰為主。

解決辦法

可以給某個主要的配置類加上@Primary注解來標示出該配置類是主配置類,當其它配置類與該類沖突時,以該類為主。這樣就可以解決上述問題了

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

最新評論