我正在用ServletInitializer
开发一个Sping Boot [web] REST风格的应用程序(因为它需要部署到一个现有的Tomcat服务器上)。它有一个@RestController
,它的方法在被调用时需要写入一个Redis pub-sub channel
。我有一个运行在本地主机上的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"
}
}
我向Sping 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)我的理解是Sping Boot Redis启动器假设默认值为spring.redis.host=localhost
和spring.redis.port=6379
,我仍然将这两个值添加到application.properties
中,但这并没有填补差距。
更新(2017-05-10)我在此帖子中添加了一个答案。
4条答案
按热度按时间qyuhtwio1#
我用redis和spring Boot 做了一个简单的例子
首先,我在Docker上安装了Redis:
$ docker运行--命名一些redis-d redis redis服务器--只附加是
然后,我用这个代码接收器:
这是我的Sping Boot 应用程序和我的监听器:
重要的一点是redis的IP。如果你像我一样安装在docker上,那么你应该在www.example.com中设置ip地址application.properties如下所示:spring.redis.host=172.17.0.4
我把所有的Spring示例都放在github here上
此外,我还使用了redis stat来监视redis。这是一个简单的监视。x1c 0d1x
ve7v8dk22#
您需要使用www.example.com配置redis服务器信息application.properties:
Spring数据文档:https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html#REDIS
iezvtpos3#
这是一个与代理相关的问题,甚至连对localhost的访问都被限制了。一旦我禁用了代理设置,Redis的健康状况就是
UP
!所以问题就解决了。我不需要为application.properties
添加任何属性,也不需要在Sping Boot 应用程序类中显式配置任何东西,因为Sping Boot 和Redis Starter会根据Redis的默认值自动配置(在我的开发环境中适用)。并将以下代码添加到
@RestController
注解类,Sping Boot 根据需要自动连接(太棒了!)。要向通道发布简单的消息,这一行代码就足以验证设置:
我感谢所有的评论,这对备份我的支票很有帮助。
enyaitl34#
Spring数据redis属性已更新,例如
spring.redis.host
现在为spring.data.redis.host
。