diff --git a/yudao-dependencies/pom.xml b/yudao-dependencies/pom.xml
index ca1274627..16998f68c 100644
--- a/yudao-dependencies/pom.xml
+++ b/yudao-dependencies/pom.xml
@@ -69,6 +69,7 @@
2.7.0
3.0.6
0.10.2
+ 4.1.113.Final
3.5.0
4.11.0
@@ -83,6 +84,13 @@
+
+ io.netty
+ netty-bom
+ ${netty.version}
+ pom
+ import
+
org.springframework.boot
spring-boot-dependencies
diff --git a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java
index a0c39c631..d2ae112ca 100644
--- a/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java
+++ b/yudao-framework/yudao-spring-boot-starter-biz-tenant/src/main/java/cn/iocoder/yudao/framework/tenant/core/job/TenantJobAspect.java
@@ -17,6 +17,7 @@ import org.aspectj.lang.annotation.Aspect;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.atomic.AtomicBoolean;
/**
* 多租户 JobHandler AOP
@@ -43,21 +44,26 @@ public class TenantJobAspect {
// 逐个租户,执行 Job
Map results = new ConcurrentHashMap<>();
+ AtomicBoolean success = new AtomicBoolean(true); // 标记,是否存在失败的情况
tenantIds.parallelStream().forEach(tenantId -> {
// TODO 芋艿:先通过 parallel 实现并行;1)多个租户,是一条执行日志;2)异常的情况
TenantUtils.execute(tenantId, () -> {
try {
- joinPoint.proceed();
+ Object result = joinPoint.proceed();
+ results.put(tenantId, StrUtil.toStringOrNull(result));
} catch (Throwable e) {
results.put(tenantId, ExceptionUtil.getRootCauseMessage(e));
+ success.set(false);
// 打印异常
XxlJobHelper.log(StrUtil.format("[多租户({}) 执行任务({}),发生异常:{}]",
tenantId, joinPoint.getSignature(), ExceptionUtils.getStackTrace(e)));
}
});
});
- // 如果 results 非空,说明发生了异常,标记 XXL-Job 执行失败
- if (CollUtil.isNotEmpty(results)) {
+ // 记录执行结果
+ if (success.get()) {
+ XxlJobHelper.handleSuccess(JsonUtils.toJsonString(results));
+ } else {
XxlJobHelper.handleFail(JsonUtils.toJsonString(results));
}
}
diff --git a/yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java b/yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java
index 0f08b7cf5..cabceb807 100644
--- a/yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java
+++ b/yudao-framework/yudao-spring-boot-starter-websocket/src/main/java/cn/iocoder/yudao/framework/websocket/config/YudaoWebSocketAutoConfiguration.java
@@ -5,6 +5,7 @@ import cn.iocoder.yudao.framework.mq.redis.core.RedisMQTemplate;
import cn.iocoder.yudao.framework.websocket.core.handler.JsonWebSocketMessageHandler;
import cn.iocoder.yudao.framework.websocket.core.listener.WebSocketMessageListener;
import cn.iocoder.yudao.framework.websocket.core.security.LoginUserHandshakeInterceptor;
+import cn.iocoder.yudao.framework.websocket.core.security.WebSocketAuthorizeRequestsCustomizer;
import cn.iocoder.yudao.framework.websocket.core.sender.kafka.KafkaWebSocketMessageConsumer;
import cn.iocoder.yudao.framework.websocket.core.sender.kafka.KafkaWebSocketMessageSender;
import cn.iocoder.yudao.framework.websocket.core.sender.local.LocalWebSocketMessageSender;
@@ -76,6 +77,11 @@ public class YudaoWebSocketAutoConfiguration {
return new WebSocketSessionManagerImpl();
}
+ @Bean
+ public WebSocketAuthorizeRequestsCustomizer webSocketAuthorizeRequestsCustomizer(WebSocketProperties webSocketProperties) {
+ return new WebSocketAuthorizeRequestsCustomizer(webSocketProperties);
+ }
+
// ==================== Sender 相关 ====================
@Configuration