From 98f3964a4f9d3ab7939092fd7e5291c0d1a01fb7 Mon Sep 17 00:00:00 2001 From: Leo Date: Fri, 17 Oct 2025 11:07:39 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E5=88=A0=E9=99=A4heritage-common?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 移除异步线程池配置AsyncConfig - 移除Jackson序列化配置JacksonConfig - 移除Long类型序列化配置LongSerializerConfig - 移除Redis序列化配置RedisConfig - 清理过时的基础设施配置 --- .../heritage/common/config/AsyncConfig.java | 71 ------------ .../heritage/common/config/JacksonConfig.java | 105 ------------------ .../common/config/LongSerializerConfig.java | 42 ------- .../heritage/common/config/RedisConfig.java | 94 ---------------- 4 files changed, 312 deletions(-) delete mode 100755 heritage-common/src/main/java/org/leocoder/heritage/common/config/AsyncConfig.java delete mode 100755 heritage-common/src/main/java/org/leocoder/heritage/common/config/JacksonConfig.java delete mode 100755 heritage-common/src/main/java/org/leocoder/heritage/common/config/LongSerializerConfig.java delete mode 100755 heritage-common/src/main/java/org/leocoder/heritage/common/config/RedisConfig.java diff --git a/heritage-common/src/main/java/org/leocoder/heritage/common/config/AsyncConfig.java b/heritage-common/src/main/java/org/leocoder/heritage/common/config/AsyncConfig.java deleted file mode 100755 index f83facd..0000000 --- a/heritage-common/src/main/java/org/leocoder/heritage/common/config/AsyncConfig.java +++ /dev/null @@ -1,71 +0,0 @@ -package org.leocoder.heritage.common.config; - -import cn.hutool.core.lang.UUID; -import org.slf4j.MDC; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.task.TaskExecutor; -import org.springframework.scheduling.annotation.EnableAsync; -import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; - -import java.util.Map; -import java.util.concurrent.ThreadPoolExecutor; - -/** - * @description [多线程核心配置类] - * @author : Leocoder - */ -@Configuration -@EnableAsync -public class AsyncConfig { - - /** - * cpu个数查询方式,Runtime.getRuntime().availableProcessors() - * 其中的corePoolSize设置参考:N为cpu个数 - * 如果是CPU密集型应用,则线程池大小设置为 N+1 - * 如果是IO密集型应用,则线程池大小设置为 2N+1 - * Linux命令查询方式: - * cat /proc/cpuinfo| grep "processor"| wc -l - */ - private final int core = Runtime.getRuntime().availableProcessors() + 1; - - @Bean - public TaskExecutor taskExecutor() { - ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); - // 核心线程数:线程池创建时候初始化的线程数 - executor.setCorePoolSize(core + 1); - // 最大线程数:线程池最大的线程数,只有在缓冲队列满了之后才会申请超过核心线程数的线程 - executor.setMaxPoolSize(core * 2); - // 缓冲队列:用来缓冲执行任务的队列 - executor.setQueueCapacity(128); - // 允许线程的空闲时间60秒:当超过了核心线程之外的线程在空闲时间到达之后会被销毁 - executor.setKeepAliveSeconds(60); - // 线程池名的前缀:设置好了之后可以方便我们定位处理任务所在的线程池 - executor.setThreadNamePrefix("CoderAsyncExecutor-"); - // 缓冲队列满了之后的拒绝策略:不在新线程中执行任务,而是有调用者所在的线程来执行 - executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); - // 设置线程装饰器 - executor.setTaskDecorator(runnable -> { - Map contextMap = MDC.getCopyOfContextMap(); - return () -> { - if (contextMap == null) { - MDC.clear(); - } else { - MDC.setContextMap(contextMap); - } - if (MDC.get("traceId") == null) { - MDC.put("traceId", UUID.fastUUID().toString(true)); - } - try { - runnable.run(); - } finally { - MDC.clear(); - } - }; - }); - // 初始化线程池, 初始化 core 线程 - executor.initialize(); - return executor; - } - -} diff --git a/heritage-common/src/main/java/org/leocoder/heritage/common/config/JacksonConfig.java b/heritage-common/src/main/java/org/leocoder/heritage/common/config/JacksonConfig.java deleted file mode 100755 index 8a3ffb9..0000000 --- a/heritage-common/src/main/java/org/leocoder/heritage/common/config/JacksonConfig.java +++ /dev/null @@ -1,105 +0,0 @@ -package org.leocoder.heritage.common.config; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.databind.module.SimpleModule; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; -import lombok.extern.slf4j.Slf4j; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.context.annotation.Primary; - -import java.math.BigInteger; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; -import java.util.Locale; -import java.util.TimeZone; - -/** - * @author : Leocoder - * @description [JacksonConfig] - */ -@Slf4j -@Configuration -public class JacksonConfig { - - @Primary - @Bean - public ObjectMapper objectMapper() { - ObjectMapper objectMapper = new ObjectMapper(); - configureObjectMapper(objectMapper); - log.info("启动Jackson配置"); - return objectMapper; - } - - /** - * @description [数据返回配置] - * @author : Leocoder - */ - private void configureObjectMapper(ObjectMapper objectMapper) { - // JsonInclude.Include.ALWAYS 所以属性都必须在 - // JsonInclude.Include.NON_NULL 如果你属性是null,就会自动剔除 - // JsonInclude.Include.NON_EMPTY 如果你属性是"",就会自动剔除 - // objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); - // objectMapper.setSerializationInclusion(JsonInclude.Include.NON_EMPTY); - // 对象的所有字段全部列入 - objectMapper.setSerializationInclusion(JsonInclude.Include.ALWAYS); - // 忽略空Bean转json的错误 - objectMapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); - // 忽略在json字符串中存在,但是在java对象中不存在对应属性的情况。防止错误 - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - // 精度的转换问题 - objectMapper.configure(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS, true); - objectMapper.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true); - objectMapper.setLocale(Locale.CHINA); - // 设置时区 - objectMapper.setTimeZone(TimeZone.getTimeZone("Asia/Shanghai")); - - // 配置日期和时间格式 - configureDateAndTimeFormats(objectMapper); - - // 配置Long和BigInteger的自定义序列化器 - configureCustomSerializers(objectMapper); - - } - - /** - * @description [配置日期和时间格式] - * @author : Leocoder - */ - private void configureDateAndTimeFormats(ObjectMapper objectMapper) { - // JavaTimeModule 用于指定序列化和反序列化规则 - JavaTimeModule javaTimeModule = new JavaTimeModule(); - // 支持 LocalDateTime、LocalDate、LocalTime - javaTimeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - javaTimeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - javaTimeModule.addSerializer(LocalDate.class, new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - javaTimeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - javaTimeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); - javaTimeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); - objectMapper.registerModule(javaTimeModule); - } - - /** - * @description [配置Long和BigInteger的自定义序列化器] - * @author : Leocoder - */ - private void configureCustomSerializers(ObjectMapper objectMapper) { - SimpleModule simpleModule = new SimpleModule(); - simpleModule.addSerializer(Long.class, LongSerializerConfig.INSTANCE); - simpleModule.addSerializer(Long.TYPE, LongSerializerConfig.INSTANCE); - simpleModule.addSerializer(BigInteger.class, LongSerializerConfig.INSTANCE); - objectMapper.registerModule(simpleModule); - } - -} diff --git a/heritage-common/src/main/java/org/leocoder/heritage/common/config/LongSerializerConfig.java b/heritage-common/src/main/java/org/leocoder/heritage/common/config/LongSerializerConfig.java deleted file mode 100755 index ad72d93..0000000 --- a/heritage-common/src/main/java/org/leocoder/heritage/common/config/LongSerializerConfig.java +++ /dev/null @@ -1,42 +0,0 @@ -package org.leocoder.heritage.common.config; - -import com.fasterxml.jackson.core.JsonGenerator; -import com.fasterxml.jackson.databind.SerializerProvider; -import com.fasterxml.jackson.databind.annotation.JacksonStdImpl; -import com.fasterxml.jackson.databind.ser.std.NumberSerializer; - -import java.io.IOException; - -/** - * @author : Leocoder - * @description [LongSerializerConfig-Long类型序列化] - */ -@JacksonStdImpl -public class LongSerializerConfig extends NumberSerializer { - - /** - * 根据 JS Number.MAX_SAFE_INTEGER 与 Number.MIN_SAFE_INTEGER 得来 - */ - private static final long MAX_SAFE_INTEGER = 9007199254740991L; - private static final long MIN_SAFE_INTEGER = -9007199254740991L; - - /** - * 提供实例 - */ - public static final LongSerializerConfig INSTANCE = new LongSerializerConfig(Number.class); - - public LongSerializerConfig(Class rawType) { - super(rawType); - } - - @Override - public void serialize(Number value, JsonGenerator gen, SerializerProvider provider) throws IOException { - // 超出范围 序列化位字符串 - if (value.longValue() > MIN_SAFE_INTEGER && value.longValue() < MAX_SAFE_INTEGER) { - super.serialize(value, gen, provider); - } else { - gen.writeString(value.toString()); - } - } - -} diff --git a/heritage-common/src/main/java/org/leocoder/heritage/common/config/RedisConfig.java b/heritage-common/src/main/java/org/leocoder/heritage/common/config/RedisConfig.java deleted file mode 100755 index 6798bcb..0000000 --- a/heritage-common/src/main/java/org/leocoder/heritage/common/config/RedisConfig.java +++ /dev/null @@ -1,94 +0,0 @@ -package org.leocoder.heritage.common.config; - -import com.fasterxml.jackson.annotation.JsonTypeInfo; -import com.fasterxml.jackson.databind.DeserializationFeature; -import com.fasterxml.jackson.databind.ObjectMapper; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; -import org.springframework.cache.annotation.CachingConfigurer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.data.redis.connection.RedisConnectionFactory; -import org.springframework.data.redis.core.RedisTemplate; -import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer; -import org.springframework.data.redis.serializer.StringRedisSerializer; - -import java.text.SimpleDateFormat; -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; - -/** - * @author : Leocoder - * @description [Redis配置类] - */ -@Configuration -public class RedisConfig implements CachingConfigurer { - - // 标准日期 - private static final String STANDARD_PATTERN = "yyyy-MM-dd HH:mm:ss"; - // 年月日格式 - private static final String DATE_PATTERN = "yyyy-MM-dd"; - // 时间格式 - private static final String TIME_PATTERN = "HH:mm:ss"; - - @Bean - public RedisTemplate redisTemplate(RedisConnectionFactory connectionFactory) { - RedisTemplate template = new RedisTemplate<>(); - // 使用Jackson2JsonRedisSerialize 替换默认序列化 - ObjectMapper objectMapper = new ObjectMapper(); - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - objectMapper.activateDefaultTyping(objectMapper.getPolymorphicTypeValidator(), - ObjectMapper.DefaultTyping.NON_FINAL, - JsonTypeInfo.As.PROPERTY); - objectMapper.disable(SerializationFeature.FAIL_ON_EMPTY_BEANS); - // LocalDateTime日期序列化处理 - objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); - this.registerLocalDateTime(objectMapper); - Jackson2JsonRedisSerializer jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<>(objectMapper, Object.class); - - template.setConnectionFactory(connectionFactory); - // key采用String的序列化方式 - template.setKeySerializer(new StringRedisSerializer()); - // value序列化方式采用jackson - template.setValueSerializer(jackson2JsonRedisSerializer); - // hash的key也采用String的序列化方式 - template.setHashKeySerializer(new StringRedisSerializer()); - // hash的value序列化方式采用jackson - template.setHashValueSerializer(jackson2JsonRedisSerializer); - template.afterPropertiesSet(); - return template; - } - - /** - * @description [处理时间类型] - * @author : Leocoder - */ - private void registerLocalDateTime(ObjectMapper objectMapper) { - // 设置java.util.Date时间类的序列化以及反序列化的格式 - objectMapper.setDateFormat(new SimpleDateFormat(STANDARD_PATTERN)); - - JavaTimeModule timeModule = new JavaTimeModule(); - // LocalDateTime - DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern(STANDARD_PATTERN); - timeModule.addSerializer(LocalDateTime.class, new LocalDateTimeSerializer(dateTimeFormatter)); - timeModule.addDeserializer(LocalDateTime.class, new LocalDateTimeDeserializer(dateTimeFormatter)); - // LocalDate - DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(DATE_PATTERN); - timeModule.addSerializer(LocalDate.class, new LocalDateSerializer(dateFormatter)); - timeModule.addDeserializer(LocalDate.class, new LocalDateDeserializer(dateFormatter)); - // LocalTime - DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern(TIME_PATTERN); - timeModule.addSerializer(LocalTime.class, new LocalTimeSerializer(timeFormatter)); - timeModule.addDeserializer(LocalTime.class, new LocalTimeDeserializer(timeFormatter)); - objectMapper.registerModule(timeModule); - } - -}