【问题标题】:Not picking properties for Redis from property file不从属性文件中选择 Redis 的属性
【发布时间】:2019-05-20 11:57:25
【问题描述】:

我已经在我的 Spring Boot 应用程序中配置了 Redis,并在 application.properties 文件中放置了一些属性。但它采用默认属性 (localhost:6379)

这里是配置

@Configuration
@EnableRedisRepositories("com.demo.redis.repository")
public class RedisDataSourceConfig {


    @Bean
    public JedisConnectionFactory jedisConnectionFactory() {
        log.debug("Create Jedis Connection Factory");
        return new JedisConnectionFactory();
    }


    @Bean
    public RedisTemplate<String, Object> redisTemplate() {
        RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(jedisConnectionFactory());
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new JdkSerializationRedisSerializer());
        template.setHashKeySerializer(template.getKeySerializer());
        template.setHashValueSerializer(template.getValueSerializer());
        return template;
    }


    @Bean
    public RedisTemplate<String, Object> jsonRedisTemplate() {
        RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
        redisTemplate.setConnectionFactory(jedisConnectionFactory());
        redisTemplate.setKeySerializer(new StringRedisSerializer());
        redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
        redisTemplate.setHashKeySerializer(redisTemplate.getKeySerializer());
        redisTemplate.setHashValueSerializer(redisTemplate.getValueSerializer());
        return redisTemplate;
    }
}

这是我在属性文件中的属性

spring.cache.type=redis
spring.redis.host=192.168.10.226
spring.redis.port=6379
spring.cache.redis.time-to-live=600000

【问题讨论】:

    标签: spring-boot spring-data-redis


    【解决方案1】:

    我使用了 RedisStandaloneConfiguration 来设置属性。现在一切正常

    @Bean
        JedisConnectionFactory jedisConnectionFactory() {
    
            RedisStandaloneConfiguration redisStandaloneConfiguration = new RedisStandaloneConfiguration();
            redisStandaloneConfiguration.setHostName("localhost");
            redisStandaloneConfiguration.setPort(6379);
            redisStandaloneConfiguration.setDatabase(0);
            redisStandaloneConfiguration.setPassword(RedisPassword.of("password"));
    
            JedisClientConfigurationBuilder jedisClientConfiguration = JedisClientConfiguration.builder();
            jedisClientConfiguration.connectTimeout(Duration.ofSeconds(60));// 60s connection timeout
    
            JedisConnectionFactory jedisConFactory = new JedisConnectionFactory(redisStandaloneConfiguration,
                    jedisClientConfiguration.build());
    
            return jedisConFactory;
        }
    

    【讨论】:

      【解决方案2】:

      在您的配置中添加 PropertySource 注释

      @Configuration
      @EnableRedisRepositories("com.demo.redis.repository")
      @PropertySource("classpath:application.properties")
      public class RedisDataSourceConfig {
      
      
      @Bean
      public JedisConnectionFactory jedisConnectionFactory() {
          log.debug("Create Jedis Connection Factory");
          return new JedisConnectionFactory();
      }
      
      
      @Bean
      public RedisTemplate<String, Object> redisTemplate() {
          RedisTemplate<String, Object> template = new RedisTemplate<>();
          template.setConnectionFactory(jedisConnectionFactory());
          template.setKeySerializer(new StringRedisSerializer());
          template.setValueSerializer(new JdkSerializationRedisSerializer());
          template.setHashKeySerializer(template.getKeySerializer());
          template.setHashValueSerializer(template.getValueSerializer());
          return template;
      }
      
      
      @Bean
      public RedisTemplate<String, Object> jsonRedisTemplate() {
          RedisTemplate<String, Object> redisTemplate = new RedisTemplate<>();
          redisTemplate.setConnectionFactory(jedisConnectionFactory());
          redisTemplate.setKeySerializer(new StringRedisSerializer());
          redisTemplate.setValueSerializer(new Jackson2JsonRedisSerializer<>(Object.class));
          redisTemplate.setHashKeySerializer(redisTemplate.getKeySerializer());
          redisTemplate.setHashValueSerializer(redisTemplate.getValueSerializer());
          return redisTemplate;
      }
      

      }

      【讨论】:

        【解决方案3】:

        JedisConnectionFactory 应该使用@Autowired,而不是使用@Bean 注释。使用以下代码:

        @Autowired
        private JedisConnectionFactory jedisConnectionFactory;
        

        然后在您的 redisTemplate() 方法中调用:

        template.setConnectionFactory(jedisConnectionFactory);
        

        现在,jedisConnectionFactory 将使用您的application.properties,只要它在标准路径中可用:src/main/resources

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-12-02
          • 1970-01-01
          • 2012-08-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-12-22
          • 2022-07-29
          相关资源
          最近更新 更多