Commit 6db1a712 authored by liaozan's avatar liaozan 🏀

Publish ConfigLoadedEvent synchronously

parent fbb996a1
...@@ -4,7 +4,6 @@ import com.ctrip.framework.apollo.Config; ...@@ -4,7 +4,6 @@ import com.ctrip.framework.apollo.Config;
import com.ctrip.framework.apollo.ConfigService; import com.ctrip.framework.apollo.ConfigService;
import com.schbrain.common.util.properties.OrderedMapPropertySource; import com.schbrain.common.util.properties.OrderedMapPropertySource;
import com.schbrain.common.util.support.ConfigurableProperties; import com.schbrain.common.util.support.ConfigurableProperties;
import com.schbrain.framework.autoconfigure.apollo.event.ConcurrentEventMulticaster;
import com.schbrain.framework.autoconfigure.apollo.event.ConfigLoadedEvent; import com.schbrain.framework.autoconfigure.apollo.event.ConfigLoadedEvent;
import com.schbrain.framework.autoconfigure.apollo.event.listener.ConfigLoadedEventListener; import com.schbrain.framework.autoconfigure.apollo.event.listener.ConfigLoadedEventListener;
import com.schbrain.framework.autoconfigure.apollo.properties.ApolloProperties; import com.schbrain.framework.autoconfigure.apollo.properties.ApolloProperties;
...@@ -14,6 +13,8 @@ import org.apache.commons.logging.Log; ...@@ -14,6 +13,8 @@ import org.apache.commons.logging.Log;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.logging.DeferredLogFactory; import org.springframework.boot.logging.DeferredLogFactory;
import org.springframework.context.ApplicationListener; import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ApplicationEventMulticaster;
import org.springframework.context.event.SimpleApplicationEventMulticaster;
import org.springframework.core.env.CompositePropertySource; import org.springframework.core.env.CompositePropertySource;
import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.ConfigurableEnvironment;
import org.springframework.util.ClassUtils; import org.springframework.util.ClassUtils;
...@@ -50,7 +51,7 @@ class ConfigurablePropertiesLoader { ...@@ -50,7 +51,7 @@ class ConfigurablePropertiesLoader {
return; return;
} }
ConcurrentEventMulticaster eventMulticaster = createEventMulticaster(application.getListeners()); ApplicationEventMulticaster eventMulticaster = createEventMulticaster(application.getListeners());
ApolloProperties apolloProperties = ApolloProperties.get(environment); ApolloProperties apolloProperties = ApolloProperties.get(environment);
...@@ -85,8 +86,8 @@ class ConfigurablePropertiesLoader { ...@@ -85,8 +86,8 @@ class ConfigurablePropertiesLoader {
return new ConfigLoadedEvent(environment, deferredLogFactory, propertySource, boundProperties, application); return new ConfigLoadedEvent(environment, deferredLogFactory, propertySource, boundProperties, application);
} }
private ConcurrentEventMulticaster createEventMulticaster(Set<ApplicationListener<?>> listeners) { private ApplicationEventMulticaster createEventMulticaster(Set<ApplicationListener<?>> listeners) {
ConcurrentEventMulticaster eventMulticaster = new ConcurrentEventMulticaster(); SimpleApplicationEventMulticaster eventMulticaster = new SimpleApplicationEventMulticaster();
for (ApplicationListener<?> listener : listeners) { for (ApplicationListener<?> listener : listeners) {
if (ClassUtils.isAssignableValue(ConfigLoadedEventListener.class, listener)) { if (ClassUtils.isAssignableValue(ConfigLoadedEventListener.class, listener)) {
eventMulticaster.addApplicationListener(listener); eventMulticaster.addApplicationListener(listener);
......
package com.schbrain.framework.autoconfigure.apollo.event;
import cn.hutool.core.thread.GlobalThreadPool;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.AbstractApplicationEventMulticaster;
import org.springframework.context.event.SimpleApplicationEventMulticaster;
import org.springframework.core.ResolvableType;
import org.springframework.scheduling.support.TaskUtils;
import java.util.Collection;
import java.util.concurrent.Executor;
/**
* expose {@link AbstractApplicationEventMulticaster#getApplicationListeners(ApplicationEvent, ResolvableType)}
*
* @author liaozan
* @since 2023-05-06
*/
public class ConcurrentEventMulticaster extends SimpleApplicationEventMulticaster {
public ConcurrentEventMulticaster() {
this(GlobalThreadPool.getExecutor());
}
public ConcurrentEventMulticaster(Executor executor) {
setTaskExecutor(executor);
setErrorHandler(TaskUtils.LOG_AND_PROPAGATE_ERROR_HANDLER);
}
@Override
public Collection<ApplicationListener<?>> getApplicationListeners() {
return super.getApplicationListeners();
}
}
\ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment