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

Extract acm configuration to bootstrap phase.

This commit is contained in:
xiaolongzuo 2018-10-30 15:59:38 +08:00
parent a95a323bc8
commit 32e55ca78b
3 changed files with 60 additions and 56 deletions

View File

@ -16,13 +16,12 @@
package org.springframework.cloud.alicloud.acm; package org.springframework.cloud.alicloud.acm;
import com.taobao.diamond.client.Diamond;
import org.springframework.beans.BeansException; import org.springframework.beans.BeansException;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.cloud.alicloud.acm.endpoint.AcmHealthIndicator; import org.springframework.cloud.alicloud.acm.endpoint.AcmHealthIndicator;
import org.springframework.cloud.alicloud.acm.refresh.AcmContextRefresher; import org.springframework.cloud.alicloud.acm.refresh.AcmContextRefresher;
import org.springframework.cloud.alicloud.acm.refresh.AcmRefreshHistory; import org.springframework.cloud.alicloud.acm.refresh.AcmRefreshHistory;
import org.springframework.cloud.alicloud.context.acm.AcmIntegrationProperties;
import org.springframework.cloud.alicloud.context.acm.AcmProperties; import org.springframework.cloud.alicloud.context.acm.AcmProperties;
import org.springframework.cloud.context.refresh.ContextRefresher; import org.springframework.cloud.context.refresh.ContextRefresher;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
@ -30,44 +29,47 @@ import org.springframework.context.ApplicationContextAware;
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 com.taobao.diamond.client.Diamond;
/** /**
* Created on 01/10/2017. * Created on 01/10/2017.
* *
* @author juven.xuxb * @author juven.xuxb
*/ */
@Configuration @Configuration
@ConditionalOnClass({Diamond.class}) @ConditionalOnClass({ Diamond.class })
@EnableConfigurationProperties(AcmProperties.class)
public class AcmAutoConfiguration implements ApplicationContextAware { public class AcmAutoConfiguration implements ApplicationContextAware {
private ApplicationContext applicationContext; private ApplicationContext applicationContext;
@Bean @Bean
public AcmPropertySourceRepository acmPropertySourceRepository() { public AcmPropertySourceRepository acmPropertySourceRepository() {
return new AcmPropertySourceRepository(applicationContext); return new AcmPropertySourceRepository(applicationContext);
} }
@Bean @Bean
public AcmHealthIndicator acmHealthIndicator(AcmProperties acmProperties, public AcmHealthIndicator acmHealthIndicator(AcmProperties acmProperties,
AcmPropertySourceRepository acmPropertySourceRepository) { AcmPropertySourceRepository acmPropertySourceRepository) {
return new AcmHealthIndicator(acmProperties, acmPropertySourceRepository); return new AcmHealthIndicator(acmProperties, acmPropertySourceRepository);
} }
@Bean @Bean
public AcmRefreshHistory acmRefreshHistory() { public AcmRefreshHistory acmRefreshHistory() {
return new AcmRefreshHistory(); return new AcmRefreshHistory();
} }
@Bean @Bean
public AcmContextRefresher acmContextRefresher(AcmProperties acmProperties, ContextRefresher contextRefresher, public AcmContextRefresher acmContextRefresher(
AcmRefreshHistory refreshHistory, AcmIntegrationProperties acmIntegrationProperties,
AcmPropertySourceRepository propertySourceRepository) { ContextRefresher contextRefresher, AcmRefreshHistory refreshHistory,
return new AcmContextRefresher(contextRefresher, acmProperties, refreshHistory, propertySourceRepository); AcmPropertySourceRepository propertySourceRepository) {
} return new AcmContextRefresher(contextRefresher, acmIntegrationProperties,
refreshHistory, propertySourceRepository);
}
@Override @Override
public void setApplicationContext(ApplicationContext applicationContext) public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException { throws BeansException {
this.applicationContext = applicationContext; this.applicationContext = applicationContext;
} }
} }

View File

@ -16,20 +16,6 @@
package org.springframework.cloud.alicloud.acm.refresh; package org.springframework.cloud.alicloud.acm.refresh;
import com.alibaba.edas.acm.ConfigService;
import com.alibaba.edas.acm.listener.ConfigChangeListener;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.cloud.alicloud.acm.AcmPropertySourceRepository;
import org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySource;
import org.springframework.cloud.alicloud.context.acm.AcmProperties;
import org.springframework.cloud.context.refresh.ContextRefresher;
import org.springframework.context.ApplicationListener;
import org.springframework.core.env.Environment;
import org.springframework.util.StringUtils;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.math.BigInteger; import java.math.BigInteger;
import java.security.MessageDigest; import java.security.MessageDigest;
@ -37,6 +23,19 @@ import java.security.NoSuchAlgorithmException;
import java.util.Map; import java.util.Map;
import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentHashMap;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.boot.context.event.ApplicationReadyEvent;
import org.springframework.cloud.alicloud.acm.AcmPropertySourceRepository;
import org.springframework.cloud.alicloud.acm.bootstrap.AcmPropertySource;
import org.springframework.cloud.alicloud.context.acm.AcmIntegrationProperties;
import org.springframework.cloud.context.refresh.ContextRefresher;
import org.springframework.context.ApplicationListener;
import org.springframework.util.StringUtils;
import com.alibaba.edas.acm.ConfigService;
import com.alibaba.edas.acm.listener.ConfigChangeListener;
/** /**
* On application start up, AcmContextRefresher add diamond listeners to all application * On application start up, AcmContextRefresher add diamond listeners to all application
* level dataIds, when there is a change in the data, listeners will refresh * level dataIds, when there is a change in the data, listeners will refresh
@ -50,7 +49,7 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
private final ContextRefresher contextRefresher; private final ContextRefresher contextRefresher;
private final AcmProperties properties; private final AcmIntegrationProperties acmIntegrationProperties;
private final AcmRefreshHistory refreshHistory; private final AcmRefreshHistory refreshHistory;
@ -58,14 +57,12 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
private Map<String, ConfigChangeListener> listenerMap = new ConcurrentHashMap<>(16); private Map<String, ConfigChangeListener> listenerMap = new ConcurrentHashMap<>(16);
@Autowired
private Environment environment;
public AcmContextRefresher(ContextRefresher contextRefresher, public AcmContextRefresher(ContextRefresher contextRefresher,
AcmProperties properties, AcmRefreshHistory refreshHistory, AcmIntegrationProperties acmIntegrationProperties,
AcmRefreshHistory refreshHistory,
AcmPropertySourceRepository acmPropertySourceRepository) { AcmPropertySourceRepository acmPropertySourceRepository) {
this.contextRefresher = contextRefresher; this.contextRefresher = contextRefresher;
this.properties = properties; this.acmIntegrationProperties = acmIntegrationProperties;
this.refreshHistory = refreshHistory; this.refreshHistory = refreshHistory;
this.acmPropertySourceRepository = acmPropertySourceRepository; this.acmPropertySourceRepository = acmPropertySourceRepository;
} }
@ -76,7 +73,7 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
} }
private void registerDiamondListenersForApplications() { private void registerDiamondListenersForApplications() {
if (properties.isRefreshEnabled()) { if (acmIntegrationProperties.getAcmProperties().isRefreshEnabled()) {
for (AcmPropertySource acmPropertySource : acmPropertySourceRepository for (AcmPropertySource acmPropertySource : acmPropertySourceRepository
.getAll()) { .getAll()) {
if (acmPropertySource.isGroupLevel()) { if (acmPropertySource.isGroupLevel()) {
@ -87,11 +84,8 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
} }
if (acmPropertySourceRepository.getAll().isEmpty()) { if (acmPropertySourceRepository.getAll().isEmpty()) {
String applicationName = environment registerDiamondListener(acmIntegrationProperties
.getProperty("spring.application.name"); .getApplicationConfigurationDataIdWithoutGroup());
String dataId = applicationName + "." + properties.getFileExtension();
registerDiamondListener(dataId);
} }
} }
} }
@ -119,7 +113,8 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
contextRefresher.refresh(); contextRefresher.refresh();
} }
}); });
ConfigService.addListener(dataId, properties.getGroup(), listener); ConfigService.addListener(dataId,
acmIntegrationProperties.getAcmProperties().getGroup(), listener);
} }
} }

View File

@ -34,6 +34,10 @@ public class AcmIntegrationProperties {
private AcmProperties acmProperties; private AcmProperties acmProperties;
public String getApplicationConfigurationDataIdWithoutGroup() {
return applicationName + "." + acmProperties.getFileExtension();
}
public List<String> getGroupConfigurationDataIds() { public List<String> getGroupConfigurationDataIds() {
List<String> groupConfigurationDataIds = new ArrayList<>(); List<String> groupConfigurationDataIds = new ArrayList<>();
if (StringUtils.isEmpty(applicationGroup)) { if (StringUtils.isEmpty(applicationGroup)) {
@ -88,4 +92,7 @@ public class AcmIntegrationProperties {
this.acmProperties = acmProperties; this.acmProperties = acmProperties;
} }
public AcmProperties getAcmProperties() {
return acmProperties;
}
} }