Spring Session не использует пользовательский компонент RedisTemplate - PullRequest
0 голосов
/ 28 ноября 2018

Попытка использовать компонент RedisTemplate с GenericJackson2JsonRedisSerializer, но во время отладки я заметил, что Spring Session использует другой экземпляр RedisTemplate.

@Configuration
@EnableRedisHttpSession
public class RedisHttpSessionConfig extends 
    AbstractHttpSessionApplicationInitializer {

    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        return new JedisConnectionFactory();
    }

    @Bean
    public RedisTemplate<Object, Object> redisTemplate() {
        final RedisTemplate<Object, Object> template = new RedisTemplate<>();
        template.setKeySerializer(new StringRedisSerializer());
        template.setHashKeySerializer(new StringRedisSerializer());

        template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
        template.setConnectionFactory(jedisConnectionFactory());
        return template;
    }

    @Bean
    public HttpSessionEventPublisher httpSessionEventPublisher() {
        return new HttpSessionEventPublisher();
    }

При запуске Spring Session, похоже, использует JdkSerializationRedisSerializer по умолчанию для hashValues ​​вместо требуемого GenericJackson2JsonRedisSerializer.

Удаление extends AbstractHttpSessionApplicationInitializer, похоже, заставляет Spring использовать правильный RedisTempplate bean,но тогда Spring Session вообще не подключен.

Использование Spring Session 1.3.3 и spring-boot-starter-data -redis 1.5.13.

Любая идея, что яотсутствует?

1 Ответ

0 голосов
/ 02 декабря 2018

Вам необходимо настроить и зарегистрировать компонент RedisTemplate с именем sessionRedisTemplate.Это переопределит экземпляр RedisTemplate по умолчанию, предоставленный RedisHttpSessionConfiguration.

. Вы должны настроить его следующим образом:

@Bean
public RedisTemplate<Object, Object> sessionRedisTemplate() {
    final RedisTemplate<Object, Object> template = new RedisTemplate<>();
    template.setKeySerializer(new StringRedisSerializer());
    template.setHashKeySerializer(new StringRedisSerializer());

    template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
    template.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
    template.setConnectionFactory(jedisConnectionFactory());
    return template;
}
...