feat(amazon): 实现商标筛查功能并优化用户体验
- 添加商标筛查面板和相关API接口- 实现Excel文件解析和数据过滤功能 - 添加文件上传进度跟踪和错误处理-优化空状态显示和操作引导- 实现tab状态持久化存储 - 添加订阅会员弹窗和付费入口 -优化文件选择和删除功能 - 改进UI样式和响应式布局
This commit is contained in:
@@ -0,0 +1,39 @@
|
||||
package com.ruoyi.framework.config;
|
||||
|
||||
import io.lettuce.core.ClientOptions;
|
||||
import io.lettuce.core.SocketOptions;
|
||||
import org.springframework.boot.autoconfigure.data.redis.LettuceClientConfigurationBuilderCustomizer;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* Lettuce 连接配置
|
||||
* 解决跨公网连接空闲后被中间设备关闭的问题
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Configuration
|
||||
public class LettuceConfig {
|
||||
|
||||
/**
|
||||
* 配置 Lettuce 客户端,双重保障防止连接失效
|
||||
* 1. TCP Keepalive - 操作系统层维持连接活性
|
||||
* 2. Ping Before Activate - 获取连接前验证有效性
|
||||
*/
|
||||
@Bean
|
||||
public LettuceClientConfigurationBuilderCustomizer lettuceClientConfigurationBuilderCustomizer() {
|
||||
return clientConfigurationBuilder -> {
|
||||
clientConfigurationBuilder.clientOptions(ClientOptions.builder()
|
||||
.autoReconnect(true) // 自动重连
|
||||
.pingBeforeActivateConnection(true) // 获取连接前 ping 验证(关键配置)
|
||||
.socketOptions(SocketOptions.builder()
|
||||
.keepAlive(true) // TCP Keepalive 辅助保持连接
|
||||
.connectTimeout(Duration.ofSeconds(10)) // 连接超时 10 秒
|
||||
.build())
|
||||
.build());
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
package com.ruoyi.framework.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.data.redis.connection.RedisConnectionFactory;
|
||||
import org.springframework.data.redis.connection.lettuce.LettuceConnectionFactory;
|
||||
import org.springframework.data.redis.connection.lettuce.LettucePoolingClientConfiguration;
|
||||
import org.springframework.data.redis.core.RedisTemplate;
|
||||
import org.apache.commons.pool2.impl.GenericObjectPoolConfig;
|
||||
import io.lettuce.core.ClientOptions;
|
||||
import io.lettuce.core.resource.ClientResources;
|
||||
import io.lettuce.core.resource.DefaultClientResources;
|
||||
|
||||
import java.time.Duration;
|
||||
|
||||
/**
|
||||
* Redis连接池优化配置
|
||||
* 解决Lettuce连接超时问题
|
||||
*
|
||||
* @author ruoyi
|
||||
*/
|
||||
@Configuration
|
||||
public class RedisPoolConfig {
|
||||
|
||||
/**
|
||||
* 配置Lettuce客户端,启用心跳检测和自动重连
|
||||
*/
|
||||
@Bean
|
||||
public ClientResources clientResources() {
|
||||
return DefaultClientResources.builder()
|
||||
.ioThreadPoolSize(4) // IO线程数
|
||||
.computationThreadPoolSize(4) // 计算线程数
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 优化Redis连接池配置
|
||||
*/
|
||||
@Bean
|
||||
public LettucePoolingClientConfiguration lettucePoolConfig(ClientResources clientResources) {
|
||||
GenericObjectPoolConfig<?> poolConfig = new GenericObjectPoolConfig<>();
|
||||
poolConfig.setMaxTotal(50); // 最大连接数
|
||||
poolConfig.setMaxIdle(20); // 最大空闲连接
|
||||
poolConfig.setMinIdle(5); // 最小空闲连接
|
||||
poolConfig.setMaxWaitMillis(10000); // 获取连接最大等待时间
|
||||
|
||||
return LettucePoolingClientConfiguration.builder()
|
||||
.poolConfig(poolConfig)
|
||||
.clientResources(clientResources)
|
||||
.clientOptions(ClientOptions.builder()
|
||||
.autoReconnect(true) // 自动重连
|
||||
.pingBeforeActivateConnection(true) // 连接激活前ping检测
|
||||
.build())
|
||||
.commandTimeout(Duration.ofSeconds(10)) // 命令超时时间
|
||||
.shutdownTimeout(Duration.ofMillis(100)) // 关闭超时时间
|
||||
.build();
|
||||
}
|
||||
|
||||
/**
|
||||
* 定期检查Redis连接状态
|
||||
*/
|
||||
@Bean
|
||||
public RedisTemplate<Object, Object> optimizedRedisTemplate(RedisConnectionFactory connectionFactory) {
|
||||
RedisTemplate<Object, Object> template = new RedisTemplate<>();
|
||||
template.setConnectionFactory(connectionFactory);
|
||||
|
||||
// 使用FastJson序列化器
|
||||
FastJson2JsonRedisSerializer serializer = new FastJson2JsonRedisSerializer(Object.class);
|
||||
|
||||
// 设置序列化器
|
||||
template.setKeySerializer(new org.springframework.data.redis.serializer.StringRedisSerializer());
|
||||
template.setValueSerializer(serializer);
|
||||
template.setHashKeySerializer(new org.springframework.data.redis.serializer.StringRedisSerializer());
|
||||
template.setHashValueSerializer(serializer);
|
||||
|
||||
template.afterPropertiesSet();
|
||||
return template;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user