【发布时间】:2018-08-21 19:23:27
【问题描述】:
在我的 REST 控制器 Spring 项目中,我想将 Session 信息存储在 Redis 中,并将我的自定义信息(我需要的任何内容)也存储在 Redis 中,但是在一个单独的数据库中。
在我的 application.properties 我定义了以下内容:
spring.session.store-type=redis
spring.session.redis.namespace=rdrestcore
spring.redis.host=192.168.201.46
spring.redis.port=6379
spring.redis.database=5
com.xyz.redis.host=192.168.201.46
com.xyz.redis.db=0
com.xyz.redis.port=6379
com.xyz.redis.pool.min-idle=5
我还有一个包含以下代码的类(我在某处读到我需要这个类只是为了让 Spring 管理 Redis 中的会话......如您所见,它没有代码):
@Configuration
@EnableRedisHttpSession
public class SessionConfig extends AbstractHttpSessionApplicationInitializer
{}
我终于有了这样的redis连接工厂:
@Configuration
@EnableRedisRepositories
public class RdRedisConnectionFactory {
@Autowired
private Environment env;
@Value("${com.xyz.redis.host}")
private String redisHost;
@Value("${com.xyz.redis.db}")
private Integer redisDb;
@Value("${com.xyz.redis.port}")
private Integer redisPort;
@Value("${com.xyz.redis.pool.min-idle}")
private Integer redisPoolMinIdle;
@Bean
JedisPoolConfig jedisPoolConfig() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
if(redisPoolMinIdle!=null) poolConfig.setMinIdle(redisPoolMinIdle);
return poolConfig;
}
@Bean
JedisConnectionFactory jedisConnectionFactory() {
JedisConnectionFactory jedisConFactory = new JedisConnectionFactory();
if(redisHost!=null) jedisConFactory.setHostName(redisHost);
if(redisPort!=null) jedisConFactory.setPort(redisPort);
if(redisDb!=null) jedisConFactory.setDatabase(redisDb);
jedisConFactory.setPoolConfig(jedisPoolConfig());
return jedisConFactory;
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
final RedisTemplate< String, Object > template = new RedisTemplate();
template.setConnectionFactory( jedisConnectionFactory() );
template.setKeySerializer( new StringRedisSerializer() );
template.setHashValueSerializer( new StringRedisSerializer() );
template.setValueSerializer( new StringRedisSerializer() );
return template;
}
}
当我需要读取或写入 Redis 时,我只需在需要的地方自动连接 redisTemplate 即可。
现在...问题:Spring 会话信息与我的自定义信息存储在同一个数据库中,尽管我为会话信息指定了数据库 5,为我的自定义信息指定了数据库 0。一切都进入数据库 0。
有谁知道我做错了什么?
谢谢
【问题讨论】: