1
0
mirror of https://gitee.com/mirrors/Spring-Cloud-Alibaba.git synced 2021-06-26 13:25:11 +08:00

change listener to use SmartInitializingSingleton

This commit is contained in:
tiger 2019-02-22 18:09:35 +08:00
parent ac25e4a9dc
commit ffb71e3eaf
2 changed files with 16 additions and 17 deletions

View File

@ -27,10 +27,10 @@ import com.alibaba.csp.sentinel.adapter.zuul.properties.SentinelZuulProperties;
import com.alibaba.csp.sentinel.util.StringUtil; import com.alibaba.csp.sentinel.util.StringUtil;
import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.ZuulFilter;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.alibaba.sentinel.zuul.listener.FallBackProviderListener; import org.springframework.cloud.alibaba.sentinel.zuul.listener.FallBackProviderListener;
import org.springframework.cloud.netflix.zuul.filters.ProxyRequestHelper;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment; import org.springframework.core.env.Environment;
@ -74,12 +74,6 @@ public class SentinelZuulAutoConfiguration {
return properties; return properties;
} }
@Bean
@ConditionalOnMissingBean(ProxyRequestHelper.class)
public ProxyRequestHelper proxyRequestHelper() {
return new ProxyRequestHelper();
}
@Bean @Bean
@ConditionalOnMissingBean(UrlCleaner.class) @ConditionalOnMissingBean(UrlCleaner.class)
public UrlCleaner urlCleaner(){ public UrlCleaner urlCleaner(){
@ -109,8 +103,8 @@ public class SentinelZuulAutoConfiguration {
} }
@Bean @Bean
public FallBackProviderListener fallBackProviderListener() { public FallBackProviderListener fallBackProviderListener(DefaultListableBeanFactory beanFactory) {
return new FallBackProviderListener(); return new FallBackProviderListener(beanFactory);
} }
} }

View File

@ -6,6 +6,8 @@ import com.alibaba.csp.sentinel.adapter.zuul.fallback.ZuulBlockFallbackProvider;
import org.apache.commons.collections.MapUtils; import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.SmartInitializingSingleton;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.boot.context.event.ApplicationStartedEvent; import org.springframework.boot.context.event.ApplicationStartedEvent;
import org.springframework.context.event.EventListener; import org.springframework.context.event.EventListener;
@ -15,17 +17,22 @@ import java.util.Map;
/** /**
* @author tiger * @author tiger
*/ */
public class FallBackProviderListener { public class FallBackProviderListener implements SmartInitializingSingleton {
private static final Logger logger = LoggerFactory.getLogger(FallBackProviderListener.class); private static final Logger logger = LoggerFactory.getLogger(FallBackProviderListener.class);
@EventListener(classes = ApplicationStartedEvent.class) private final DefaultListableBeanFactory beanFactory;
public void appStartedListener(ApplicationStartedEvent event) throws Exception {
Map<String, ZuulBlockFallbackProvider> providerMap = event.getApplicationContext().getBeansOfType( public FallBackProviderListener(DefaultListableBeanFactory beanFactory) {
ZuulBlockFallbackProvider.class); this.beanFactory = beanFactory;
}
@Override
public void afterSingletonsInstantiated() {
Map<String, ZuulBlockFallbackProvider> providerMap = beanFactory.getBeansOfType(ZuulBlockFallbackProvider.class);
if (MapUtils.isNotEmpty(providerMap)) { if (MapUtils.isNotEmpty(providerMap)) {
providerMap.forEach((k, v) -> { providerMap.forEach((k, v) -> {
logger.info("[Sentinel] Register provider name: {}, instance: {}", k, v); logger.info("[Sentinel] Register provider name:{}, instance: {}", k, v);
ZuulBlockFallbackManager.registerProvider(v); ZuulBlockFallbackManager.registerProvider(v);
}); });
} else { } else {
@ -33,6 +40,4 @@ public class FallBackProviderListener {
ZuulBlockFallbackManager.registerProvider(new DefaultBlockFallbackProvider()); ZuulBlockFallbackManager.registerProvider(new DefaultBlockFallbackProvider());
} }
} }
} }