Spring 会话未使用自定义 RedisTemplate bean
Spring Session not using custom RedisTemplate bean
尝试将 RedisTemplate bean 与 GenericJackson2JsonRedisSerializer 一起使用,但在调试时我注意到 SpringSession 使用不同的 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 作为哈希值,而不是所需的 GenericJackson2JsonRedisSerializer。
删除 extends AbstractHttpSessionApplicationInitializer
似乎使 Spring 使用了正确的 RedisTemplate bean,但是 Spring 会话根本没有连接。
使用 Spring 会话 1.3.3 和 spring-boot-starter-data
-redis 1.5.13.
知道我错过了什么吗?
您需要配置并注册一个名为 sessionRedisTemplate
的 RedisTemplate bean。这将覆盖 RedisHttpSessionConfiguration
.
提供的默认 RedisTemplate 实例
你应该这样配置:
@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;
}
你只需要为 spring 会话重写默认的 RedisSerializer,就像这样
@Configuration public class RedisConfig {
@Bean(name="springSessionDefaultRedisSerializer")
public RedisSerializer serializer() {
return new GenericJackson2JsonRedisSerializer();
}
尝试将 RedisTemplate bean 与 GenericJackson2JsonRedisSerializer 一起使用,但在调试时我注意到 SpringSession 使用不同的 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 作为哈希值,而不是所需的 GenericJackson2JsonRedisSerializer。
删除 extends AbstractHttpSessionApplicationInitializer
似乎使 Spring 使用了正确的 RedisTemplate bean,但是 Spring 会话根本没有连接。
使用 Spring 会话 1.3.3 和 spring-boot-starter-data -redis 1.5.13.
知道我错过了什么吗?
您需要配置并注册一个名为 sessionRedisTemplate
的 RedisTemplate bean。这将覆盖 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;
}
你只需要为 spring 会话重写默认的 RedisSerializer,就像这样
@Configuration public class RedisConfig {
@Bean(name="springSessionDefaultRedisSerializer")
public RedisSerializer serializer() {
return new GenericJackson2JsonRedisSerializer();
}