localhost
default port
などのすべてのデフォルト構成でspring-data-redis
を使用してSpring Redisを動作させています。
application.properties
ファイルで設定することにより、同じ設定をしようとしています。しかし、プロパティ値が読み取られることを正確にBeanを作成する方法を理解することはできません。
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の標準パラメーター
spring.redis.sentinel.master = themaster
spring.redis.sentinel.nodes = 192.168.188.231:26379
spring.redis.password = 12345
私が試したもの、
@PropertySource
を使用してから@Value
を挿入し、値を取得できます。しかし、これらのプロパティは私が定義したものではなく、Springからのものであるため、そうしたくありません。RedisProperties
が役立つはずですが、Springにプロパティファイルから読み取るように指示する方法を正確に把握することはできません。@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月)spring.redis.sentinelapplication.properties
のオプションでは、RedisSentinelConfiguration
のサポートが制限されています:
現在、 Jedis およびレタス Lettuce のみがRedis Sentinelをサポートしていることに注意してください。
詳細については 公式ドキュメント をご覧ください。
もっと深く見てみると、私はこれを見つけました、あなたが探しているものでしょうか?
# 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.
独自のプロパティを作成する場合は、このスレッドの以前の投稿をご覧ください。
これは私のために働く:
@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
これは、スプリングブートドキュメントセクション24段落7で見つけました
@Component
@ConfigurationProperties(prefix="connection")
public class ConnectionSettings {
private String username;
private InetAddress remoteAddress;
// ... getters and setters
}
その後、connection.propertyを介してプロパティを変更できます
ここにあなたの問題を解決するエレガントなソリューションがあります:
@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());
}
}
したがって、再開するには:
私のワークスペースでテスト、よろしく
ResourcePropertySourceを使用して、PropertySourceオブジェクトを生成できます。
PropertySource propertySource = new ResourcePropertySource("path/to/your/application.properties");
次に、RedisSentinelConfigurationのコンストラクターに渡します。
各テストクラスで@DirtiesContext(classMode = classmode.AFTER_CLASS)
を使用します。これは確実に機能します。