From 31d06eef79bc91b1cf63bca80463563adae4117b Mon Sep 17 00:00:00 2001 From: 王彪总 Date: Mon, 1 Jun 2026 13:45:46 +0800 Subject: [PATCH] fix(config): 更新配置文件和修复分页计算问题 --- java110-core/src/main/java/com/java110/core/annotation/Java110CmdDiscoveryRegistrar.java | 25 +++++++++++++++++++++---- java110-core/src/main/java/com/java110/core/event/cmd/ServiceCmdEventPublishing.java | 37 ++++++++++++++++++++++++++++++++----- java110-interface/src/main/resources/logback-prod.xml | 144 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------------------------------------------------------- java110-interface/src/main/resources/logback.xml | 143 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++---------------------------------------------------------------------- java110-utils/src/main/java/com/java110/utils/factory/ApplicationContextFactory.java | 4 ++++ pom.xml | 6 ------ service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java | 3 +-- service-order/pom.xml | 6 ++++++ service-user/src/main/java/com/java110/user/cmd/login/PcUserLoginCmd.java | 4 +++- springboot/src/main/java/com/java110/boot/BootApplicationStart.java | 11 +++++++++++ 10 files changed, 224 insertions(+), 159 deletions(-) diff --git a/java110-core/src/main/java/com/java110/core/annotation/Java110CmdDiscoveryRegistrar.java b/java110-core/src/main/java/com/java110/core/annotation/Java110CmdDiscoveryRegistrar.java index 86bd57d..9793462 100644 --- a/java110-core/src/main/java/com/java110/core/annotation/Java110CmdDiscoveryRegistrar.java +++ b/java110-core/src/main/java/com/java110/core/annotation/Java110CmdDiscoveryRegistrar.java @@ -2,6 +2,8 @@ package com.java110.core.annotation; import com.java110.dto.CmdListenerDto; import com.java110.utils.util.Assert; +import org.slf4j.Logger; +import com.java110.core.log.LoggerFactory; import org.springframework.beans.factory.BeanClassLoaderAware; import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition; import org.springframework.beans.factory.config.BeanDefinition; @@ -29,6 +31,8 @@ import java.util.Set; */ public class Java110CmdDiscoveryRegistrar implements ImportBeanDefinitionRegistrar,ResourceLoaderAware, BeanClassLoaderAware { + private static Logger logger = LoggerFactory.getLogger(Java110CmdDiscoveryRegistrar.class); + private ResourceLoader resourceLoader; private ClassLoader classLoader; @@ -42,11 +46,13 @@ public class Java110CmdDiscoveryRegistrar implements ImportBeanDefinitionRegistr try { registerListener(importingClassMetadata,registry); } catch (NoSuchMethodException e) { - e.printStackTrace(); + logger.error("Java110CmdDiscovery 注册失败: NoSuchMethodException", e); } catch (InvocationTargetException e) { - e.printStackTrace(); + logger.error("Java110CmdDiscovery 注册失败: InvocationTargetException", e); } catch (IllegalAccessException e) { - e.printStackTrace(); + logger.error("Java110CmdDiscovery 注册失败: IllegalAccessException", e); + } catch (Exception e) { + logger.error("Java110CmdDiscovery 注册失败: {}", e.getMessage(), e); } } @@ -85,9 +91,13 @@ public class Java110CmdDiscoveryRegistrar implements ImportBeanDefinitionRegistr scanner.addIncludeFilter(annotationTypeFilter); basePackages = getBasePackages(metadata); + Method method = cmdPublishClass.getMethod("addListener", CmdListenerDto.class); + int totalCount = 0; + for (String basePackage : basePackages) { Set candidateComponents = scanner .findCandidateComponents(basePackage); + int packageCount = 0; for (BeanDefinition candidateComponent : candidateComponents) { if (candidateComponent instanceof AnnotatedBeanDefinition) { // verify annotated class is an interface @@ -105,11 +115,18 @@ public class Java110CmdDiscoveryRegistrar implements ImportBeanDefinitionRegistr /*BeanDefinitionHolder definitionHolder = new BeanDefinitionHolder(beanDefinition, beanName); BeanDefinitionReaderUtils.registerBeanDefinition(definitionHolder, registry);*/ - Method method = cmdPublishClass.getMethod("addListener", CmdListenerDto.class); method.invoke(null,new CmdListenerDto(beanName,serviceCode)); + packageCount++; } } + if (packageCount > 0) { + logger.info("Java110CmdDiscovery 扫描包[{}]: 注册 {} 个Cmd服务", basePackage, packageCount); + } else { + logger.warn("Java110CmdDiscovery 扫描包[{}]: 未发现任何Cmd服务", basePackage); + } + totalCount += packageCount; } + logger.info("Java110CmdDiscovery 启动完成: 共扫描 {} 个包, 注册 {} 个Cmd服务", basePackages.size(), totalCount); } protected ClassPathScanningCandidateComponentProvider getScanner() { diff --git a/java110-core/src/main/java/com/java110/core/event/cmd/ServiceCmdEventPublishing.java b/java110-core/src/main/java/com/java110/core/event/cmd/ServiceCmdEventPublishing.java index d97df67..d0b06ca 100644 --- a/java110-core/src/main/java/com/java110/core/event/cmd/ServiceCmdEventPublishing.java +++ b/java110-core/src/main/java/com/java110/core/event/cmd/ServiceCmdEventPublishing.java @@ -52,6 +52,30 @@ public class ServiceCmdEventPublishing { } /** + * 从Spring容器中直接扫描@Java110Cmd注解的Bean并注册为Cmd监听器 + * 作为Java110CmdDiscoveryRegistrar的备用方案 + */ + public static void registerFromSpringContext() { + try { + Map cmdBeans = ApplicationContextFactory.getApplicationContext() + .getBeansWithAnnotation(com.java110.core.annotation.Java110Cmd.class); + for (Map.Entry entry : cmdBeans.entrySet()) { + String beanName = entry.getKey(); + Object bean = entry.getValue(); + com.java110.core.annotation.Java110Cmd annotation = bean.getClass() + .getAnnotation(com.java110.core.annotation.Java110Cmd.class); + if (annotation != null) { + CmdListenerDto dto = new CmdListenerDto(beanName, annotation.serviceCode()); + listeners.add(dto); + } + } + logger.info("ServiceCmdEventPublishing 从Spring容器注册: {} 个Cmd服务", cmdBeans.size()); + } catch (Exception e) { + logger.error("ServiceCmdEventPublishing 从Spring容器注册失败", e); + } + } + + /** * 获取侦听(全部侦听) * * @return @@ -71,17 +95,20 @@ public class ServiceCmdEventPublishing { Assert.hasLength(serviceCode, "获取需要发布的事件处理侦听时,传递事件为空,请检查"); - String needCachedServiceCode = serviceCode; + // 去掉前导/,与@Java110Cmd注解中的serviceCode保持一致 + String normalizedCode = serviceCode.startsWith("/") ? serviceCode.substring(1) : serviceCode; //先从缓存中获取,为了提升效率 - if (cacheListenersMap.containsKey(needCachedServiceCode)) { - return cacheListenersMap.get(needCachedServiceCode); + if (cacheListenersMap.containsKey(normalizedCode)) { + return cacheListenersMap.get(normalizedCode); } List cmdListeners = new ArrayList(); for (CmdListenerDto listenerBean : getListeners()) { //ServiceCmdListener listener = ApplicationContextFactory.getBean(listenerBean.getBeanName(), ServiceCmdListener.class); ServiceCmdListener listener = ApplicationContextFactory.getBean(listenerBean.getBeanName(), ServiceCmdListener.class); - if (listenerBean.getServiceCode().equals(serviceCode)) { + String listenerCode = listenerBean.getServiceCode().startsWith("/") + ? listenerBean.getServiceCode().substring(1) : listenerBean.getServiceCode(); + if (listenerCode.equals(normalizedCode)) { cmdListeners.add(listener); } } @@ -92,7 +119,7 @@ public class ServiceCmdEventPublishing { //将数据放入缓存中 if (cmdListeners.size() > 0) { - cacheListenersMap.put(needCachedServiceCode, cmdListeners); + cacheListenersMap.put(normalizedCode, cmdListeners); } return cmdListeners; } diff --git a/java110-interface/src/main/resources/logback-prod.xml b/java110-interface/src/main/resources/logback-prod.xml index d049bd9..044179e 100644 --- a/java110-interface/src/main/resources/logback-prod.xml +++ b/java110-interface/src/main/resources/logback-prod.xml @@ -1,13 +1,9 @@ - - - 512 - 0 - true - - + + + @@ -16,116 +12,125 @@ - - 512 - 0 - true - - - + false ./logs/info.log - + ./logs/info-%d{yyyyMMdd}.log.%i - - 500MB - + 500MB 2 + 20GB - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n - - - - - 256 - 0 - false - + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n + + ERROR ./logs/error.log - - ${LOG_PATH}/error-%d{yyyyMMdd}.log.%i - - 500MB - + + ./logs/error-%d{yyyyMMdd}.log.%i + 500MB 2 + 20GB - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n - + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n + - - 512 - 0 - true - - - false ./logs/request.log - + ./logs/request-%d{yyyyMMdd}.log.%i - - 500MB - + 500MB 7 + 20GB - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n - - - - - - 256 - 0 - false - + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n + + ERROR ./logs/api-error.log - + ./logs/api-error-%d{yyyyMMdd}.log.%i - - 500MB - + 500MB 7 + 20GB - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n - + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n + + + + + 512 + 0 + true + + + + + 512 + 0 + true + + + + + 256 + 0 + false + + + + + 512 + 0 + true + + + + + 256 + 0 + false + + + + - + - + + - + @@ -134,11 +139,8 @@ - - - diff --git a/java110-interface/src/main/resources/logback.xml b/java110-interface/src/main/resources/logback.xml index e0d89b3..d9c8e57 100644 --- a/java110-interface/src/main/resources/logback.xml +++ b/java110-interface/src/main/resources/logback.xml @@ -1,13 +1,9 @@ - - - 512 - 0 - true - - + + + @@ -16,116 +12,123 @@ - - 512 - 0 - true - - - + false ./logs/info.log - + ./logs/info-%d{yyyyMMdd}.log.%i - - 500MB - + 500MB 2 + 20GB - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n - - - - - 256 - 0 - false - + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n + + ERROR ./logs/error.log - - ${LOG_PATH}/error-%d{yyyyMMdd}.log.%i - - 500MB - + + ./logs/error-%d{yyyyMMdd}.log.%i + 500MB 2 + 20GB - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n - + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n + - - 512 - 0 - true - - - false ./logs/request.log - + ./logs/request-%d{yyyyMMdd}.log.%i - - 500MB - + 500MB 7 + 20GB - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n - - - - - - 256 - 0 - false - + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n + + ERROR ./logs/api-error.log - + ./logs/api-error-%d{yyyyMMdd}.log.%i - - 500MB - + 500MB 7 + 20GB - - %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n - + + %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} -%msg%n + + + + + + + 512 + 0 + true + + + + + 512 + 0 + true + + + + + 256 + 0 + false + + + + + 512 + 0 + true + + + + + 256 + 0 + false + - + - + - - + + - + diff --git a/java110-utils/src/main/java/com/java110/utils/factory/ApplicationContextFactory.java b/java110-utils/src/main/java/com/java110/utils/factory/ApplicationContextFactory.java index 93b78f6..f3a2baa 100755 --- a/java110-utils/src/main/java/com/java110/utils/factory/ApplicationContextFactory.java +++ b/java110-utils/src/main/java/com/java110/utils/factory/ApplicationContextFactory.java @@ -17,6 +17,10 @@ public class ApplicationContextFactory { ApplicationContextFactory.applicationContext = applicationContext; } + public static ApplicationContext getApplicationContext() { + return applicationContext; + } + public static Object getBean(Class className){ return applicationContext.getBean(className); } diff --git a/pom.xml b/pom.xml index 15ad86b..4bf1232 100755 --- a/pom.xml +++ b/pom.xml @@ -218,12 +218,6 @@ log4j-web ${log4j.version} - - - org.apache.logging.log4j - log4j-slf4j-impl - ${log4j.version} - org.apache.logging.log4j diff --git a/service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java b/service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java index b7f6e7f..b4819f1 100644 --- a/service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java +++ b/service-api/src/main/java/com/java110/api/smo/impl/ApiServiceSMOImpl.java @@ -617,9 +617,8 @@ public class ApiServiceSMOImpl extends LoggerEngine implements IApiServiceSMO { try { // Boot模式下直接调用CmdServiceSMO,避免HTTP loopback开销(~400ms) if (Environment.isStartBootWay()) { - Map headers = new HashMap<>(); + Map headers = new HashMap<>(reqHeader); headers.put(CommonConstant.HTTP_SERVICE, serviceCode); - headers.put(CommonConstant.HTTP_METHOD, CommonConstant.HTTP_METHOD_POST); ICmdServiceSMO cmdServiceSMO = ApplicationContextFactory.getBean("cmdServiceSMOImpl", ICmdServiceSMO.class); responseEntity = cmdServiceSMO.cmd(reqJson.toJSONString(), headers); } else { diff --git a/service-order/pom.xml b/service-order/pom.xml index 47f09b3..7f595a9 100755 --- a/service-order/pom.xml +++ b/service-order/pom.xml @@ -30,6 +30,12 @@ org.apache.zookeeper zookeeper + + + org.slf4j + slf4j-log4j12 + + diff --git a/service-user/src/main/java/com/java110/user/cmd/login/PcUserLoginCmd.java b/service-user/src/main/java/com/java110/user/cmd/login/PcUserLoginCmd.java index 30741fa..c746300 100644 --- a/service-user/src/main/java/com/java110/user/cmd/login/PcUserLoginCmd.java +++ b/service-user/src/main/java/com/java110/user/cmd/login/PcUserLoginCmd.java @@ -157,8 +157,10 @@ public class PcUserLoginCmd extends Cmd { @Override public void doCmd(CmdEvent event, ICmdDataFlowContext cmdDataFlowContext, JSONObject reqJson) throws CmdException { + logger.info("PcUserLoginCmd reqJson: {}", reqJson.toJSONString()); + ResponseEntity responseEntity = null; - + // 根据用户名和密码查询用户信息 UserDto userDto = new UserDto(); userDto.setName(reqJson.getString("username")); diff --git a/springboot/src/main/java/com/java110/boot/BootApplicationStart.java b/springboot/src/main/java/com/java110/boot/BootApplicationStart.java index f01b279..e0f27e0 100644 --- a/springboot/src/main/java/com/java110/boot/BootApplicationStart.java +++ b/springboot/src/main/java/com/java110/boot/BootApplicationStart.java @@ -207,6 +207,17 @@ public class BootApplicationStart { Environment.setSystemStartWay(Environment.SPRING_BOOT); + // 备用方案: 从Spring容器直接扫描@Java110Cmd Bean并注册 + ServiceCmdEventPublishing.registerFromSpringContext(); + + // 验证 Cmd 服务发现是否成功 + int cmdListenerCount = ServiceCmdEventPublishing.getListeners().size(); + if (cmdListenerCount == 0) { + logger.error("!!! 严重: Cmd服务发现失败! 所有APP API将不可用 !!!"); + } else { + logger.info("Cmd服务注册验证: {} 个服务已成功注册", cmdListenerCount); + } + //刷新缓存 flushMainCache(args); -- libgit2 0.21.4