All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.zodiac.autoconfigure.redis.RedisSerializerConfigable Maven / Gradle / Ivy

package org.zodiac.autoconfigure.redis;

import org.springframework.data.redis.serializer.GenericJackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.JdkSerializationRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.zodiac.redis.RedisSerializerType;

/**
 * Redis 序列化。
 *
 */
public interface RedisSerializerConfigable {

    /**
     * 序列化接口。
     *
     * @param configProperties 配置
     * @return RedisSerializer
     */
    RedisSerializer redisSerializer(RedisCacheCloudProperties configProperties);

    /**
     * 默认的序列化方式。
     *
     * @param configProperties 配置
     * @return RedisSerializer 序列化器
     */
    default RedisSerializer defaultRedisSerializer(RedisCacheCloudProperties configProperties) {
        RedisSerializerType serializerType = configProperties.getSerializerType();
        if (RedisSerializerType.JDK == serializerType) {
            /*
             * SpringBoot扩展了ClassLoader,进行分离打包的时候,使用到JdkSerializationRedisSerializer的地方 会因为ClassLoader的不同导致加载不到Class指定使用项目的ClassLoader
             *
             * JdkSerializationRedisSerializer默认使用{@link sun.misc.Launcher.AppClassLoader}
             * SpringBoot默认使用{@link org.springframework.boot.loader.LaunchedURLClassLoader}
             */
            ClassLoader classLoader = this.getClass().getClassLoader();
            return new JdkSerializationRedisSerializer(classLoader);
        }
        return new GenericJackson2JsonRedisSerializer();
    }
}