fix 修复 netty 对虚拟线程适配有问题 导致长时间使用 redisson 卡死问题

This commit is contained in:
疯狂的狮子Li
2026-04-21 10:59:19 +08:00
parent c17948510c
commit 2848b51853
3 changed files with 12 additions and 6 deletions

View File

@@ -34,7 +34,7 @@ public class ThreadPoolConfig {
@Bean(name = "scheduledExecutorService") @Bean(name = "scheduledExecutorService")
protected ScheduledExecutorService scheduledExecutorService() { protected ScheduledExecutorService scheduledExecutorService() {
// daemon 必须为 true // daemon 必须为 true
BasicThreadFactory.Builder builder = new BasicThreadFactory.Builder().daemon(true); BasicThreadFactory.Builder builder = BasicThreadFactory.builder().daemon(true);
if (SpringUtils.isVirtual()) { if (SpringUtils.isVirtual()) {
builder.namingPattern("virtual-schedule-pool-%d").wrappedFactory(new VirtualThreadTaskExecutor().getVirtualThreadFactory()); builder.namingPattern("virtual-schedule-pool-%d").wrappedFactory(new VirtualThreadTaskExecutor().getVirtualThreadFactory());
} else { } else {

View File

@@ -562,4 +562,11 @@ public class StringUtils extends org.apache.commons.lang3.StringUtils {
return Strings.CS.endsWithAny(sequence, searchStrings); return Strings.CS.endsWithAny(sequence, searchStrings);
} }
/**
* 测试 CharSequence 是否以指定的后缀结尾。
*/
public static boolean endsWith(final CharSequence str, final CharSequence suffix) {
return Strings.CS.endsWith(str, suffix);
}
} }

View File

@@ -4,7 +4,6 @@ import cn.hutool.core.util.ObjectUtil;
import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonAutoDetect;
import com.fasterxml.jackson.annotation.PropertyAccessor; import com.fasterxml.jackson.annotation.PropertyAccessor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.utils.SpringUtils;
import org.dromara.common.redis.config.properties.RedissonProperties; import org.dromara.common.redis.config.properties.RedissonProperties;
import org.dromara.common.redis.handler.KeyPrefixHandler; import org.dromara.common.redis.handler.KeyPrefixHandler;
import org.dromara.common.redis.handler.RedisExceptionHandler; import org.dromara.common.redis.handler.RedisExceptionHandler;
@@ -16,7 +15,6 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.AutoConfiguration;
import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.core.task.VirtualThreadTaskExecutor;
import tools.jackson.databind.DefaultTyping; import tools.jackson.databind.DefaultTyping;
import tools.jackson.databind.ext.javatime.deser.LocalDateTimeDeserializer; import tools.jackson.databind.ext.javatime.deser.LocalDateTimeDeserializer;
import tools.jackson.databind.ext.javatime.ser.LocalDateTimeSerializer; import tools.jackson.databind.ext.javatime.ser.LocalDateTimeSerializer;
@@ -72,9 +70,10 @@ public class RedisConfig {
//设置redis key前缀 //设置redis key前缀
.setNameMapper(new KeyPrefixHandler(redissonProperties.getKeyPrefix())) .setNameMapper(new KeyPrefixHandler(redissonProperties.getKeyPrefix()))
.setCodec(codec); .setCodec(codec);
if (SpringUtils.isVirtual()) { // netty 对虚拟线程适配有问题 暂时禁止使用
config.setNettyExecutor(new VirtualThreadTaskExecutor("redisson-")); //if (SpringUtils.isVirtual()) {
} // config.setNettyExecutor(new VirtualThreadTaskExecutor("redisson-"));
//}
RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig(); RedissonProperties.SingleServerConfig singleServerConfig = redissonProperties.getSingleServerConfig();
if (ObjectUtil.isNotNull(singleServerConfig)) { if (ObjectUtil.isNotNull(singleServerConfig)) {
// 使用单机模式 // 使用单机模式