【发布时间】:2017-10-08 07:45:31
【问题描述】:
我正在开发一个带有 ServletInitializer 的 Spring Boot [web] REST 样式应用程序(因为它需要部署到现有的 Tomcat 服务器)。它有一个 @RestController 和一个方法,当调用该方法时,需要写入 Redis pub-sub channel。我在 localhost 上运行 Redis 服务器(默认端口,无密码)。 POM 文件的相关部分具有所需的启动器依赖项:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
当我部署 WAR 并点击端点 http://localhost:8080/springBootApp/health 时,我得到以下响应:
{
"status": "DOWN",
"diskSpace": {
"status": "UP",
"total": 999324516352,
"free": 691261681664,
"threshold": 10485760
},
"redis": {
"status": "DOWN",
"error": "org.springframework.data.redis.RedisConnectionFailureException: java.net.SocketTimeoutException: Read timed out; nested exception is redis.clients.jedis.exceptions.JedisConnectionException: java.net.SocketTimeoutException: Read timed out"
}
}
我在我的 Spring Boot 应用程序类中添加了以下内容:
@Bean
JedisConnectionFactory jedisConnectionFactory() {
return new JedisConnectionFactory();
}
@Bean
public RedisTemplate<String, Object> redisTemplate() {
RedisTemplate<String, Object> template = new RedisTemplate<String, Object>();
template.setConnectionFactory(jedisConnectionFactory());
return template;
}
在执行一些测试 Redis 代码之前,我还尝试将以下内容添加到我的 @RestController,但我在堆栈跟踪中得到与上面相同的错误:
@Autowired
private RedisTemplate<String, String> redisTemplate;
编辑 (2017-05-09)
我的理解是 Spring Boot Redis starter 假定默认值为spring.redis.host=localhost 和spring.redis.port=6379,我仍然将这两个添加到application.properties,但这并没有填补空白。
更新 (2017-05-10) 我在这个帖子中添加了一个答案。
【问题讨论】:
标签: java spring-boot redis