例如读取Apollo配置
@Component
@ConfigurationProperties(prefix = "account.tenant")
public class ShuidiAppCodePropertiesCopy {
/**
* shuidi-app-code列表, 按照,分割
*/
private String appCode;
public String getAppCode() {
return appCode;
}
public void setAppCode(String appCode) {
this.appCode = appCode;
}
}
修改Apollo值后 该配置仍为启动时读取的值
添加 @RefreshScope 仍不行
添加事件监听解决
import com.ctrip.framework.apollo.model.ConfigChange;
import com.ctrip.framework.apollo.model.ConfigChangeEvent;
import com.ctrip.framework.apollo.spring.annotation.ApolloConfigChangeListener;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeansException;
import org.springframework.cloud.context.environment.EnvironmentChangeEvent;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
/**
* @author wjl
* @version 1.0
* @date 2021/12/15 下午2:46
*/
@Component
@Slf4j
public class ApolloConfigChanged implements ApplicationContextAware {
private ApplicationContext applicationContext;
@ApolloConfigChangeListener
private void someChangeHandler(ConfigChangeEvent changeEvent) {
for (String key : changeEvent.changedKeys()) {
ConfigChange change = changeEvent.getChange(key);
log.info("Found change - {}", change.toString());
}
// 更新相应的bean的属性值,主要是存在@ConfigurationProperties注解的bean
this.applicationContext.publishEvent(new EnvironmentChangeEvent(changeEvent.changedKeys()));
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}