据我所知,spring引导和spring会话为我们提供了一站式的自动配置,但是当我的应用程序使用会话redis和app缓存redis服务器时,我如何配置它,非常感谢您的回复!
发布于 2017-12-31 01:24:44
实际上,在默认情况下,spring会话和spring缓存实际上都是使用名为RedisConnectionFactory bean的connectionFactory来配置的。这有两种方法。
spring-session使用不同的connectionFactory bean实例,并保留spring缓存以使用默认的connectionFactory。下面是一个示例解决方案:
@Configuration公共类RedisHttpSessionConfig { @Bean StringRedisSerializer stringRedisSerializer() {返回新的StringRedisSerializer();} @Bean RedisConnectionFactory redisHttpSessionConnectionFactory() { RedisConnectionFactory redisHttpSessionConnectionFactory = null;// .在这里添加代码返回redisHttpSessionConnectionFactory;} @Bean公共RedisTemplate sessionRedisTemplate( RedisConnectionFactory redisHttpSessionConnectionFactory) { RedisTemplate模板=新RedisTemplate();template.setKeySerializer(新StringRedisSerializer());template.setHashKeySerializer(新StringRedisSerializer());template.setValueSerializer(新StringRedisSerializer());template.setValueSerializer(新StringRedisSerializer());}}spring-cache使用不同的connectionFactory bean实例,并保留spring会话以使用默认的connectionFactory。下面是一个示例解决方案:
@Configuration公共类RedisCacheConfig { @Bean StringRedisSerializer stringRedisSerializer() {返回新的StringRedisSerializer();} @Bean RedisConnectionFactory redisCacheConnectionFactory() { RedisConnectionFactory redisCacheConnectionFactory = null;// .在这里添加代码返回redisCacheConnectionFactory;} @Bean RedisTemplate redisTemplate(RedisConnectionFactory redisCacheConnectionFactory) { RedisTemplate redisTemplate =新RedisTemplate();} @Bean(name = " StringRedisTemplate ")公共stringRedisTemplate.setKeySerializer(this.stringRedisSerializer());stringRedisTemplate(RedisConnectionFactory redisCacheConnectionFactory)抛出UnknownHostException { stringRedisTemplate StringRedisTemplate =新StringRedisTemplate();返回stringRedisTemplate(新GenericJackson2JsonRedisSerializer());}Bean CacheManager cacheManager(RedisTemplate cacheManager CacheManager){redisTemplate=新();(600 L);cacheManager.setUsePrefix(true);返回cacheManager;}发布于 2019-07-05 03:20:31
标记默认的RedisConnectionFactory @主
@Bean
@Primary
public RedisConnectionFactory redisConnectionFactory(RedisProperties properties) {
return redisConnectionFactory(redisProperties);
}并标记会话RedisConnectionFactory @SpringSessionRedisConnectionFactory
@Bean
@SpringSessionRedisConnectionFactory
public RedisConnectionFactory springSessionRedisConnectionFactory() {
return redisConnectionFactory(...);
}redisConnectionFactory()配置RedisConnectionFactory。例如:
private static RedisConnectionFactory redisConnectionFactory(RedisProperties redisProperties, boolean afterPropertiesSet) {
RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
redisStandaloneConfiguration.setHostName(redisProperties.getHost());
redisStandaloneConfiguration.setPassword(RedisPassword.of(redisProperties.getPassword()));
redisStandaloneConfiguration.setDatabase(redisProperties.getDatabase());
redisStandaloneConfiguration.setPort(redisProperties.getPort());
GenericObjectPoolConfig genericObjectPoolConfig = new GenericObjectPoolConfig();
genericObjectPoolConfig.setMaxIdle(redisProperties.getLettuce().getPool().getMaxIdle());
genericObjectPoolConfig.setMinIdle(redisProperties.getLettuce().getPool().getMinIdle());
genericObjectPoolConfig.setMaxTotal(redisProperties.getLettuce().getPool().getMaxActive());
genericObjectPoolConfig.setMaxWaitMillis(redisProperties.getLettuce().getPool().getMaxWait().toMillis());
genericObjectPoolConfig.setTestOnBorrow(true);
genericObjectPoolConfig.setTestOnReturn(true);
LettuceConnectionFactory lettuceConnectionFactory = new LettuceConnectionFactory(redisStandaloneConfiguration,
LettucePoolingClientConfiguration.builder().commandTimeout(redisProperties.getTimeout()).poolConfig(genericObjectPoolConfig).build());
if (afterPropertiesSet) {
lettuceConnectionFactory.afterPropertiesSet();
}
return lettuceConnectionFactory;
}https://stackoverflow.com/questions/47965495
复制相似问题