복붙노트

[SPRING] Spring Redis - application.properties 파일에서 구성을 읽습니다.

SPRING

Spring Redis - application.properties 파일에서 구성을 읽습니다.

Spring Redis는 spring-data-redis를 사용하여 모든 기본 설정이 localhost 기본 포트를 좋아하는 방식으로 작업하고 있습니다.

이제 application.properties 파일에서 구성하여 동일한 구성을 만들려고합니다. 하지만 정확히 어떻게 내 속성 값을 읽을 콩을 만들어야 알아낼 수 없습니다.

Redis 구성 파일

@EnableRedisHttpSession
@Configuration
public class SpringSessionRedisConfiguration {

@Bean
JedisConnectionFactory connectionFactory() {
    return new JedisConnectionFactory();
}

@Autowired
@Bean
RedisCacheManager redisCacheManager(final StringRedisTemplate stringRedisTemplate) {
    return new RedisCacheManager(stringRedisTemplate);
}

@Autowired
@Bean
StringRedisTemplate template(final RedisConnectionFactory connectionFactory) {
    return new StringRedisTemplate(connectionFactory);
}
}

application.properties의 표준 매개 변수

내가 뭘했는지,

해결법

  1. ==============================

    1.@PropertySource를 사용하여 application.properties 또는 원하는 다른 등록 정보 파일에서 옵션을 읽을 수 있습니다. PropertySource 사용 예와 사용법 spring-redis-cache의 사용 예를 살펴보십시오. 또는이 작은 샘플을보십시오.

    @PropertySource를 사용하여 application.properties 또는 원하는 다른 등록 정보 파일에서 옵션을 읽을 수 있습니다. PropertySource 사용 예와 사용법 spring-redis-cache의 사용 예를 살펴보십시오. 또는이 작은 샘플을보십시오.

    @Configuration
    @PropertySource("application.properties")
    public class SpringSessionRedisConfiguration {
    
        @Value("${redis.hostname}")
        private String redisHostName;
    
        @Value("${redis.port}")
        private int redisPort;
    
        @Bean
        public static PropertySourcesPlaceholderConfigurer    propertySourcesPlaceholderConfigurer() {
            return new PropertySourcesPlaceholderConfigurer();
        }
    
        @Bean
        JedisConnectionFactory jedisConnectionFactory() {
            JedisConnectionFactory factory = new JedisConnectionFactory();
            factory.setHostName(redisHostName);
            factory.setPort(redisPort);
            factory.setUsePool(true);
            return factory;
        }
    
        @Bean
        RedisTemplate<Object, Object> redisTemplate() {
            RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
            redisTemplate.setConnectionFactory(jedisConnectionFactory());
            return redisTemplate;
        }
    
        @Bean
        RedisCacheManager cacheManager() {
            RedisCacheManager redisCacheManager = new RedisCacheManager(redisTemplate());
            return redisCacheManager;
        }
    }
    

    현재 (2015 년 12 월) application.properties의 spring.redis.sentinel 옵션에는 RedisSentinelConfiguration의 제한된 지원이 있습니다.

    이에 대한 자세한 내용은 공식 문서를 참조하십시오.

  2. ==============================

    2.더 깊게 보았을 때 나는 이것을 찾았습니다. 당신이 찾고있는 것이 될 수 있습니까?

    더 깊게 보았을 때 나는 이것을 찾았습니다. 당신이 찾고있는 것이 될 수 있습니까?

    # REDIS (RedisProperties)
    spring.redis.database=0 # Database index used by the connection factory.
    spring.redis.host=localhost # Redis server host.
    spring.redis.password= # Login password of the redis server.
    spring.redis.pool.max-active=8 # Max number of connections that can be allocated by the pool at a given time. Use a negative value for no limit.
    spring.redis.pool.max-idle=8 # Max number of "idle" connections in the pool. Use a negative value to indicate an unlimited number of idle connections.
    spring.redis.pool.max-wait=-1 # Maximum amount of time (in milliseconds) a connection allocation should block before throwing an exception when the pool is exhausted. Use a negative value to block indefinitely.
    spring.redis.pool.min-idle=0 # Target for the minimum number of idle connections to maintain in the pool. This setting only has an effect if it is positive.
    spring.redis.port=6379 # Redis server port.
    spring.redis.sentinel.master= # Name of Redis server.
    spring.redis.sentinel.nodes= # Comma-separated list of host:port pairs.
    spring.redis.timeout=0 # Connection timeout in milliseconds. 
    

    참조 : https : //docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html Searchterm Redis

    내가 볼 수있는 것에서는 값이 이미 존재하며 다음과 같이 정의됩니다.

    spring.redis.host=localhost # Redis server host.
    spring.redis.port=6379 # Redis server port.
    

    자신의 속성을 만들려면이 스레드의 이전 게시물을 볼 수 있습니다.

  3. ==============================

    3.나는 이것을 봄 부트 문서 섹션 24 단락 7에서 발견했다.

    나는 이것을 봄 부트 문서 섹션 24 단락 7에서 발견했다.

    @Component
    @ConfigurationProperties(prefix="connection")
    public class ConnectionSettings {
    
        private String username;
    
        private InetAddress remoteAddress;
    
        // ... getters and setters
    
    } 
    

    그런 다음 connection.property를 통해 속성을 수정할 수 있습니다.

    참조 링크 : https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html#boot-features-external-config-typesafe-configuration-properties

  4. ==============================

    4.다음은 문제를 해결할 수있는 우아한 해결책입니다.

    다음은 문제를 해결할 수있는 우아한 해결책입니다.

    @Configuration
    @PropertySource(name="application", value="classpath:application.properties")
    public class SpringSessionRedisConfiguration {
    
        @Resource
        ConfigurableEnvironment environment;
    
        @Bean
        public PropertiesPropertySource propertySource() {
            return (PropertiesPropertySource) environment.getPropertySources().get("application");
        }
    
        @Bean
        public JedisConnectionFactory jedisConnectionFactory() {
            return new JedisConnectionFactory(sentinelConfiguration(), poolConfiguration());
        }
    
        @Bean
        public RedisSentinelConfiguration sentinelConfiguration() {
            return new RedisSentinelConfiguration(propertySource());
        }
    
        @Bean
        public JedisPoolConfig poolConfiguration() {
            JedisPoolConfiguration config = new JedisPoolConfiguration();
            // add your customized configuration if needed
            return config;
        }
    
        @Bean
        RedisTemplate<Object, Object> redisTemplate() {
            RedisTemplate<Object, Object> redisTemplate = new RedisTemplate<Object, Object>();
            redisTemplate.setConnectionFactory(jedisConnectionFactory());
            return redisTemplate;
        }
    
        @Bean
        RedisCacheManager cacheManager() {
            return new RedisCacheManager(redisTemplate());
        }
    
    }
    

    그래서, 다시 시작하려면 :

    내 작업 공간에서 테스트되었습니다. 문안 인사

  5. ==============================

    5.이 작품은 나를 위해 :

    이 작품은 나를 위해 :

    @Configuration
    @EnableRedisRepositories
    public class RedisConfig {
    
        @Bean
        public JedisConnectionFactory jedisConnectionFactory() {
            RedisProperties properties = redisProperties();
            RedisStandaloneConfiguration configuration = new RedisStandaloneConfiguration();
            configuration.setHostName(properties.getHost());
            configuration.setPort(properties.getPort());
    
            return new JedisConnectionFactory(configuration);
        }
    
        @Bean
        public RedisTemplate<String, Object> redisTemplate() {
            final RedisTemplate<String, Object> template = new RedisTemplate<>();
            template.setConnectionFactory(jedisConnectionFactory());
            template.setValueSerializer(new GenericToStringSerializer<>(Object.class));
            return template;
        }
    
        @Bean
        @Primary
        public RedisProperties redisProperties() {
            return new RedisProperties();
        }
    
    }
    

    및 특성 파일 :

    spring.redis.host=localhost
    spring.redis.port=6379
    
  6. ==============================

    6.나는 당신이 찾고있는이 것 같아요. http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html

    나는 당신이 찾고있는이 것 같아요. http://docs.spring.io/spring-session/docs/current/reference/html5/guides/boot.html

  7. ==============================

    7.ResourcePropertySource를 사용하여 PropertySource 객체를 생성 할 수 있습니다.

    ResourcePropertySource를 사용하여 PropertySource 객체를 생성 할 수 있습니다.

    PropertySource propertySource = new ResourcePropertySource("path/to/your/application.properties");
    

    그런 다음 RedisSentinelConfiguration의 생성자로 전달합니다.

  8. ==============================

    8.각 테스트 클래스에서 @DirtiesContext (classMode = classmode.AFTER_CLASS)를 사용하십시오. 이것은 분명히 당신을 위해 작동합니다.

    각 테스트 클래스에서 @DirtiesContext (classMode = classmode.AFTER_CLASS)를 사용하십시오. 이것은 분명히 당신을 위해 작동합니다.

  9. ==============================

    9.

    @Autowired
    private JedisConnectionFactory connectionFactory;
    
    @Bean
    JedisConnectionFactory connectionFactory() {
        return connectionFactory
    }
    
  10. from https://stackoverflow.com/questions/34201135/spring-redis-read-configuration-from-application-properties-file by cc-by-sa and MIT license