Extract acm configuration to bootstrap phase.

pull/77/head
xiaolongzuo 6 years ago
parent a95a323bc8
commit 32e55ca78b

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

@ -16,26 +16,25 @@
package org.springframework.cloud.alicloud.acm.refresh;
import com.alibaba.edas.acm.ConfigService;
import com.alibaba.edas.acm.listener.ConfigChangeListener;
import java.io.UnsupportedEncodingException;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
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.alicloud.context.acm.AcmIntegrationProperties;
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.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import com.alibaba.edas.acm.ConfigService;
import com.alibaba.edas.acm.listener.ConfigChangeListener;
/**
* On application start up, AcmContextRefresher add diamond listeners to all application
@ -50,7 +49,7 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
private final ContextRefresher contextRefresher;
private final AcmProperties properties;
private final AcmIntegrationProperties acmIntegrationProperties;
private final AcmRefreshHistory refreshHistory;
@ -58,14 +57,12 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
private Map<String, ConfigChangeListener> listenerMap = new ConcurrentHashMap<>(16);
@Autowired
private Environment environment;
public AcmContextRefresher(ContextRefresher contextRefresher,
AcmProperties properties, AcmRefreshHistory refreshHistory,
AcmIntegrationProperties acmIntegrationProperties,
AcmRefreshHistory refreshHistory,
AcmPropertySourceRepository acmPropertySourceRepository) {
this.contextRefresher = contextRefresher;
this.properties = properties;
this.acmIntegrationProperties = acmIntegrationProperties;
this.refreshHistory = refreshHistory;
this.acmPropertySourceRepository = acmPropertySourceRepository;
}
@ -76,7 +73,7 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
}
private void registerDiamondListenersForApplications() {
if (properties.isRefreshEnabled()) {
if (acmIntegrationProperties.getAcmProperties().isRefreshEnabled()) {
for (AcmPropertySource acmPropertySource : acmPropertySourceRepository
.getAll()) {
if (acmPropertySource.isGroupLevel()) {
@ -87,11 +84,8 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
}
if (acmPropertySourceRepository.getAll().isEmpty()) {
String applicationName = environment
.getProperty("spring.application.name");
String dataId = applicationName + "." + properties.getFileExtension();
registerDiamondListener(dataId);
registerDiamondListener(acmIntegrationProperties
.getApplicationConfigurationDataIdWithoutGroup());
}
}
}
@ -119,7 +113,8 @@ public class AcmContextRefresher implements ApplicationListener<ApplicationReady
contextRefresher.refresh();
}
});
ConfigService.addListener(dataId, properties.getGroup(), listener);
ConfigService.addListener(dataId,
acmIntegrationProperties.getAcmProperties().getGroup(), listener);
}
}

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

Loading…
Cancel
Save