接入Apollo后,我们可以通过注解方式一行注解,即可获取所需的配置信息(由于Apollo支持热部署,能够实现动态加载)
1.定义用来标识Apolo配置的注解
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.FIELD})
public @interface ApolloValue {
String value() default "";
}
2.定义映射配置信息的对象
import lombok.Data;
@Data
public class OwlApolloConfigBean {
@ApolloValue("demo.demo")
private String demo;
}
3.接入Apollo,获取配置信息,并通过监听事件,实现动态加载。
/**
* @author XingPengLong
* @date 2018-06-13 下午9:10.
*/
@Slf4j
@Configuration
@EnableApolloConfig
public class OwlApolloConfig {
private static Config appConfig;
private static final String APOLLO_KEY = "owlApolloConfigBean";
private static ConcurrentHashMap<String, OwlApolloConfigBean> concurrentHashMap = new ConcurrentHashMap<>();
static {
//config instance is singleton for each namespace and is never null
appConfig = ConfigService.getAppConfig();
appConfig.addChangeListener(changeEvent -> {
for (String key : changeEvent.changedKeys()) {
log.info("OwlApolloConfig#static before concurrentHashMap:{}", JSON.toJSONString(concurrentHashMap));
ConfigChange change = changeEvent.getChange(key);
OwlApolloConfigBean owlApolloConfigBean = concurrentHashMap.get(APOLLO_KEY);
switch (change.getChangeType()) {