diff --git a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/context/SpringContext.java b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/context/SpringContext.java index 20ecacf9..5b2eee80 100644 --- a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/context/SpringContext.java +++ b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/context/SpringContext.java @@ -2,6 +2,9 @@ package com.aizuda.easy.retry.common.core.context; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeansException; +import org.springframework.beans.factory.ListableBeanFactory; +import org.springframework.beans.factory.config.BeanFactoryPostProcessor; +import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.core.Ordered; @@ -15,23 +18,42 @@ import org.springframework.stereotype.Component; @Component @Order(Ordered.HIGHEST_PRECEDENCE) @Slf4j -public class SpringContext implements ApplicationContextAware { +public class SpringContext implements BeanFactoryPostProcessor, ApplicationContextAware { - public static ApplicationContext CONTEXT; + private static ConfigurableListableBeanFactory FACTORY; + + private static ApplicationContext CONTEXT; @Override - public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { + public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) { + SpringContext.FACTORY = beanFactory; + } + + @Override + public void setApplicationContext(ApplicationContext applicationContext) { SpringContext.CONTEXT = applicationContext; } + public static ListableBeanFactory getBeanFactory() { + final ListableBeanFactory factory = null == FACTORY ? CONTEXT : FACTORY; + if (null == factory) { + throw new RuntimeException("No ConfigurableListableBeanFactory or ApplicationContext injected, maybe not in the Spring environment?"); + } + return factory; + } + + public static ApplicationContext getContext() { + return CONTEXT; + } + public static T getBeanByType(Class clazz) { - return CONTEXT.getBean(clazz); + return getBeanFactory().getBean(clazz); } public static synchronized T getBean(String name) { try { - return (T) CONTEXT.getBean(name); + return (T) getBeanFactory().getBean(name); } catch (BeansException | NullPointerException exception) { log.error(" BeanName:{} not exist,Exception => {}", name, exception.getMessage()); return null; @@ -40,7 +62,7 @@ public class SpringContext implements ApplicationContextAware { public static synchronized T getBean(Class requiredType) { try { - return CONTEXT.getBean(requiredType); + return getBeanFactory().getBean(requiredType); } catch (BeansException | NullPointerException exception) { log.error(" BeanName:{} not exist,Exception => {}", requiredType.getName(), exception.getMessage()); return null; @@ -49,7 +71,7 @@ public class SpringContext implements ApplicationContextAware { public static synchronized T getBean(String name, Class requiredType) { try { - return CONTEXT.getBean(name, requiredType); + return getBeanFactory().getBean(name, requiredType); } catch (BeansException | NullPointerException exception) { log.error(" BeanName:{} not exist,Exception => {}", name, exception.getMessage()); return null; diff --git a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/log/LogUtils.java b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/log/LogUtils.java index b7f68778..bbd2f964 100644 --- a/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/log/LogUtils.java +++ b/easy-retry-common/easy-retry-common-core/src/main/java/com/aizuda/easy/retry/common/core/log/LogUtils.java @@ -69,7 +69,7 @@ public class LogUtils { private static Boolean getLogStatus() { try { - Environment environment = SpringContext.CONTEXT.getBean(Environment.class); + Environment environment = SpringContext.getBean(Environment.class); return environment.getProperty("easy-retry.log.status", Boolean.class, Boolean.TRUE); } catch (Exception ignored) { } diff --git a/easy-retry-datasource/easy-retry-sqlserver-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports b/easy-retry-datasource/easy-retry-sqlserver-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports deleted file mode 100644 index cb288191..00000000 --- a/easy-retry-datasource/easy-retry-sqlserver-datasource/src/main/resources/META-INF/spring/org.springframework.boot.autoconfigure.AutoConfiguration.imports +++ /dev/null @@ -1 +0,0 @@ -com.aizuda.easy.retry.sqlserver.datasource.config.EasyRetrySqlServerAutoConfiguration \ No newline at end of file diff --git a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/client/RpcClientInvokeHandler.java b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/client/RpcClientInvokeHandler.java index 409764ff..f4581a8e 100644 --- a/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/client/RpcClientInvokeHandler.java +++ b/easy-retry-server/easy-retry-server-common/src/main/java/com/aizuda/easy/retry/server/common/client/RpcClientInvokeHandler.java @@ -133,7 +133,7 @@ public class RpcClientInvokeHandler implements InvocationHandler { Assert.notNull(parasResult.body, () -> new EasyRetryServerException("body cannot be null")); } - RestTemplate restTemplate = SpringContext.CONTEXT.getBean(RestTemplate.class); + RestTemplate restTemplate = SpringContext.getBean(RestTemplate.class); Retryer retryer = buildResultRetryer(); @@ -169,7 +169,7 @@ public class RpcClientInvokeHandler implements InvocationHandler { // 进行路由剔除处理 CacheRegisterTable.remove(groupName, namespaceId, hostId); // 重新选一个可用的客户端节点 - ClientNodeAllocateHandler clientNodeAllocateHandler = SpringContext.CONTEXT.getBean( + ClientNodeAllocateHandler clientNodeAllocateHandler = SpringContext.getBean( ClientNodeAllocateHandler.class); RegisterNodeInfo serverNode = clientNodeAllocateHandler.getServerNode(allocKey, groupName, namespaceId, routeKey); diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java index d5b08efe..5f59f0ec 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/dispatch/JobExecutorActor.java @@ -91,7 +91,7 @@ public class JobExecutorActor extends AbstractActor { } catch (Exception e) { EasyRetryLog.LOCAL.error("job executor exception. [{}]", taskExecute, e); handlerTaskBatch(taskExecute, JobTaskBatchStatusEnum.FAIL.getStatus(), JobOperationReasonEnum.TASK_EXECUTION_ERROR.getReason()); - SpringContext.CONTEXT.publishEvent(new JobTaskFailAlarmEvent(taskExecute.getTaskBatchId())); + SpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(taskExecute.getTaskBatchId())); } finally { getContext().stop(getSelf()); } diff --git a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/JobTaskBatchHandler.java b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/JobTaskBatchHandler.java index 907e22e0..44b1a259 100644 --- a/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/JobTaskBatchHandler.java +++ b/easy-retry-server/easy-retry-server-job-task/src/main/java/com/aizuda/easy/retry/server/job/task/support/handler/JobTaskBatchHandler.java @@ -65,7 +65,7 @@ public class JobTaskBatchHandler { if (failCount > 0) { jobTaskBatch.setTaskBatchStatus(JobTaskBatchStatusEnum.FAIL.getStatus()); - SpringContext.CONTEXT.publishEvent(new JobTaskFailAlarmEvent(completeJobBatchDTO.getTaskBatchId())); + SpringContext.getContext().publishEvent(new JobTaskFailAlarmEvent(completeJobBatchDTO.getTaskBatchId())); } else if (stopCount > 0) { jobTaskBatch.setTaskBatchStatus(JobTaskBatchStatusEnum.STOP.getStatus()); } else { diff --git a/easy-retry-server/easy-retry-server-starter/src/main/java/com/aizuda/easy/retry/server/starter/server/RequestHandlerActor.java b/easy-retry-server/easy-retry-server-starter/src/main/java/com/aizuda/easy/retry/server/starter/server/RequestHandlerActor.java index 9ad51a2a..78f19a9b 100644 --- a/easy-retry-server/easy-retry-server-starter/src/main/java/com/aizuda/easy/retry/server/starter/server/RequestHandlerActor.java +++ b/easy-retry-server/easy-retry-server-starter/src/main/java/com/aizuda/easy/retry/server/starter/server/RequestHandlerActor.java @@ -104,7 +104,7 @@ public class RequestHandlerActor extends AbstractActor { } UrlBuilder builder = UrlBuilder.ofHttp(uri); - Collection httpRequestHandlers = SpringContext.CONTEXT + Collection httpRequestHandlers = SpringContext.getContext() .getBeansOfType(HttpRequestHandler.class).values(); for (HttpRequestHandler httpRequestHandler : httpRequestHandlers) { if (httpRequestHandler.supports(builder.getPathStr()) && method.name()