diff --git a/core/src/main/java/com/alibaba/nacos/core/distributed/ProtocolManager.java b/core/src/main/java/com/alibaba/nacos/core/distributed/ProtocolManager.java index 3559cb1fdca..de38b102dc0 100644 --- a/core/src/main/java/com/alibaba/nacos/core/distributed/ProtocolManager.java +++ b/core/src/main/java/com/alibaba/nacos/core/distributed/ProtocolManager.java @@ -28,6 +28,7 @@ import com.alibaba.nacos.core.cluster.ServerMemberManager; import com.alibaba.nacos.core.utils.ClassUtils; import com.alibaba.nacos.sys.utils.ApplicationUtils; +import org.springframework.beans.BeansException; import org.springframework.beans.factory.DisposableBean; import org.springframework.stereotype.Component; @@ -52,9 +53,13 @@ public class ProtocolManager extends MemberChangeListener implements DisposableB private final ServerMemberManager memberManager; - private boolean apInit = false; + private volatile boolean apInit = false; - private boolean cpInit = false; + private volatile boolean cpInit = false; + + private final Object cpLock = new Object(); + + private final Object apLock = new Object(); private Set oldMembers; @@ -80,20 +85,24 @@ public static Set toCPMembersInfo(Collection members) { } public CPProtocol getCpProtocol() { - synchronized (this) { - if (!cpInit) { - initCPProtocol(); - cpInit = true; + if (!cpInit){ + synchronized (cpLock) { + if (!cpInit) { + initCPProtocol(); + cpInit = true; + } } } return cpProtocol; } public APProtocol getApProtocol() { - synchronized (this) { - if (!apInit) { - initAPProtocol(); - apInit = true; + if (!apInit) { + synchronized (apLock) { + if (!apInit) { + initAPProtocol(); + apInit = true; + } } } return apProtocol; diff --git a/sys/src/main/java/com/alibaba/nacos/sys/utils/ApplicationUtils.java b/sys/src/main/java/com/alibaba/nacos/sys/utils/ApplicationUtils.java index 86ea24ca7c3..189803a1a73 100644 --- a/sys/src/main/java/com/alibaba/nacos/sys/utils/ApplicationUtils.java +++ b/sys/src/main/java/com/alibaba/nacos/sys/utils/ApplicationUtils.java @@ -151,11 +151,8 @@ public static T getBean(Class requiredType) throws BeansException { } public static void getBeanIfExist(Class requiredType, Consumer consumer) throws BeansException { - try { - T bean = applicationContext.getBean(requiredType); - consumer.accept(bean); - } catch (NoSuchBeanDefinitionException ignore) { - } + T bean = applicationContext.getBean(requiredType); + consumer.accept(bean); } public static T getBean(Class requiredType, Object... args) throws BeansException {