据我所知,spring boot和spring session为我们提供了一站式自动配置,但是当我的应用程序使用会话redis和应用程序缓存redis时,不是同一个redis服务器;
我该如何配置呢,非常感谢您的回复!
事实上,默认情况下,spring-session 和 spring-cache 实际上都是由 spring-boot 配置的RedisConnectionFactory
豆命名为connectionFactory
。
有两种方法可以做到这一点。
-
make spring-session
使用不同的connectionFactory
bean 实例,并保留 spring-cache 使用默认值connectionFactory
。下面是一个示例解决方案:
@Configuration
public class RedisHttpSessionConfig {
@Bean
StringRedisSerializer stringRedisSerializer() {
return new StringRedisSerializer();
}
@Bean
RedisConnectionFactory redisHttpSessionConnectionFactory() {
RedisConnectionFactory redisHttpSessionConnectionFactory = null;
// ... add your codes here
return redisHttpSessionConnectionFactory;
}
@Bean
public RedisTemplate<Object, Object> sessionRedisTemplate(
RedisConnectionFactory redisHttpSessionConnectionFactory) {
RedisTemplate<Object, Object> template = new RedisTemplate<Object, Object>();
template.setKeySerializer(new StringRedisSerializer());
template.setHashKeySerializer(new StringRedisSerializer());
template.setValueSerializer(new GenericJackson2JsonRedisSerializer());
template.setDefaultSerializer(GenericJackson2JsonRedisSerializer());
template.setConnectionFactory(redisHttpSessionConnectionFactory);
return template;
}
}
-
make spring-cache
使用不同的connectionFactory
bean 实例,并保留 spring-session 使用默认值connectionFactory
。下面是一个示例解决方案:
@Configuration
public class RedisCacheConfig {
@Bean
StringRedisSerializer stringRedisSerializer() {
return new StringRedisSerializer();
}
@Bean
RedisConnectionFactory redisCacheConnectionFactory() {
RedisConnectionFactory redisCacheConnectionFactory = null;
// ... add your codes here
return redisCacheConnectionFactory;
}
@Bean
RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisCacheConnectionFactory) {
RedisTemplate<Object, Object> redisTemplate = new RedisTemplate();
redisTemplate.setConnectionFactory(redisCacheConnectionFactory);
redisTemplate.setKeySerializer(this.stringRedisSerializer());
redisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return redisTemplate;
}
@Bean(name = "stringRedisTemplate")
public StringRedisTemplate stringRedisTemplate(RedisConnectionFactory redisCacheConnectionFactory) throws UnknownHostException {
StringRedisTemplate stringRedisTemplate = new StringRedisTemplate();
stringRedisTemplate.setConnectionFactory(redisCacheConnectionFactory);
stringRedisTemplate.setKeySerializer(this.stringRedisSerializer());
stringRedisTemplate.setValueSerializer(new GenericJackson2JsonRedisSerializer());
return stringRedisTemplate;
}
@Bean
CacheManager cacheManager(RedisTemplate redisTemplate) {
RedisCacheManager cacheManager = new RedisCacheManager(redisTemplate);
cacheManager.setDefaultExpiration(600l);
cacheManager.setUsePrefix(true);
return cacheManager;
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)