【发布时间】:2021-08-29 20:01:23
【问题描述】:
我使用 jedis 作为带有 spring boot 的 redis 连接。
jedis池配置如下:
@Configuration
@ConditionalOnClass(JedisPool.class)
@EnableConfigurationProperties(JedisProperties.class)
public class JedisAutoConfiguration {
private JedisProperties jedisProperties;
public JedisAutoConfiguration(JedisProperties jedisProperties) {
this.jedisProperties = jedisProperties;
}
@Bean
@ConditionalOnMissingBean(JedisPool.class)
public JedisPool jedisPool() {
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxIdle(jedisProperties.getPool().getMaxIdle());
poolConfig.setMaxTotal(jedisProperties.getPool().getMaxTotal());
poolConfig.setMaxWaitMillis(jedisProperties.getPool().getMaxWaitMillis() * 1000);
JedisPool jedisPool = new JedisPool(poolConfig, jedisProperties.getHost(), jedisProperties.getPort(),
jedisProperties.getTimeout()*1000, jedisProperties.getPassword(), 0);
return jedisPool;
}
}
每次需要连接redis的时候,我都会从jedis pool中租一个资源:
@Service
public class UserService {
@Autowired
private JedisPool jedisPool;
public User FindUserFromCache(Integer id){
Jedis resource = jedisPool.getResource()
// business logic
// resource.close()
}
}
问题:
1.我应该在业务逻辑结束时将资源返回到池中吗? spring boot 或者 java runtime 可以自动处理这种情况吗?
2.如果资源没有关闭,那么资源永远不会回到池中?
【问题讨论】:
标签: java spring spring-boot jedis