尝试用spring会话和redis配置spring引导应用程序,但有以下问题。无法解决这个问题。
构造函数抛出异常;嵌套异常为java.lang.IllegalStateException:未将BeanFactory注入@Configuration类
这段代码对我来说很好
@Configuration
@EnableRedisHttpSession
public class HttpSessionConfig {
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.readFrom(SLAVE_PREFERRED)
.build();
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration()
.master("mymaster")
.sentinel("192.168.56.50", 26379)
.sentinel("192.168.56.50", 26380)
.sentinel("192.168.56.50", 26381);
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(sentinelConfig, clientConfig);
}
}但这段代码不是用PropertySource编写的。
Spring说:- **RedisSentinelConfiguration也可以用PropertySource定义,它允许您设置以下属性:
配置属性spring.redis.sentinel.master:主节点的名称。
spring.redis.sentinel.nodes:逗号分隔的主机列表:端口对。**
@Configuration
@EnableRedisHttpSession
@PropertySource(name="application", value="classpath:application.properties")
public class HttpSessionConfig {
@Resource
ConfigurableEnvironment environment;
@Bean
public PropertiesPropertySource propertySource() {
return (PropertiesPropertySource) environment.getPropertySources().get("defaultProperties");
}
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.readFrom(SLAVE_PREFERRED)
.build();
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration(propertySource());
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(sentinelConfig, clientConfig);
}
}application.properties
server.port=8090
spring.security.user.name=admin
spring.security.user.password=admin
spring.redis.sentinel.master=mymaster
spring.redis.sentinel.nodes=192.168.56.50:26379,192.168.56.50:26380,192.168.56.50:26381
spring.application.name=spring-session-demo发布于 2019-08-05 01:02:42
前哨节点属性的格式是逗号分隔的键:值对。因此,您可以通过java split()函数提取主机和端口。
@Autowired
private Environment env;
@Bean
public LettuceConnectionFactory connectionFactory() {
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration();
String master = env.getProperty("spring.redis.sentinel.master");
String nodes = env.getProperty("spring.redis.sentinel.nodes");
sentinelConfig.master(master);
for (String node : nodes.split(",")) {
String split[] = node.split(":");
sentinelConfig.sentinel(split[0], Integer.parseInt(split[1]));
}
...
}https://stackoverflow.com/questions/55975081
复制相似问题