Spring Boot Redis 配置不起作用

Web*_*ser 1 java redis spring-boot

我正在开发一个 Spring Boot [web] REST 风格的应用程序ServletInitializer(因为它需要部署到现有的 Tomcat 服务器)。它有一个@RestControllerwith 方法,调用该方法时需要写入 Redis pub-sub channel。我的 Redis 服务器在本地主机上运行(默认端口,无密码)。POM 文件的相关部分具有所需的启动依赖项:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

当我部署 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"
  }
}
Run Code Online (Sandbox Code Playgroud)

我将以下内容添加到我的 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;
}
Run Code Online (Sandbox Code Playgroud)

在执行一些测试 Redis 代码之前,我还尝试将以下内容添加到我的代码中@RestController,但在堆栈跟踪中得到与上面相同的错误:

@Autowired
private RedisTemplate<String, String> redisTemplate;
Run Code Online (Sandbox Code Playgroud)

编辑(2017-05-09) 我的理解是 Spring Boot Redis 启动器假定spring.redis.host=localhost和的默认值spring.redis.port=6379,我仍然将这两个添加到application.properties,但这并没有填补空白。

更新(2017-05-10)我对此线程添加了答案。

小智 5

Spring data redis 属性已更新,例如spring.redis.host现在spring.data.redis.host