Невозможно получить доступ к свойствам при использовании Spring-сессии с Redis.
Авто проводка не происходит, следовательно, этот объект является нулевым. Не уверен, что я здесь не так делаю.
@ Autowired
частные RedisSentinelProperties redisSentinelProperties;
Без весенней сессии работает нормально, без проблем.
Я пробовал без весенней сессии, и она отлично работает. Возможность доступа ко всем свойствам и автоматическое подключение происходит правильно
@ Autowired
private RedisSentinelProperties redisSentinelProperties;
Конфигурация пользовательских свойств
@Component
@ConfigurationProperties(prefix = "app.redis")
@Validated
public class RedisSentinelProperties {
@NotNull
private String masterName;
@Valid
private Sentinel sentinel = new Sentinel();
////removed the getter and setter method for better readability
public static class Sentinel {
@NotEmpty
private List<String> nodes = new ArrayList<>();
//removed the getter and setter method for better readability
}
}
application.properties
app.redis.master-name=mymaster
app.redis.sentinel.nodes=192.168.56.50:26379,192.168.56.50:26380,192.168.56.50:26381
конфигурация весенней сессии
@SpringBootApplication
public class ConfigPropertiesDemoApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigPropertiesDemoApplication.class, args);
}
}
public class RedisHttpSessionInitializer extends AbstractHttpSessionApplicationInitializer {
public RedisHttpSessionInitializer() {
super(RedisHttpSessionConfig.class);
}
}
@Configuration
@EnableRedisHttpSession
@EnableWebSecurity
public class RedisHttpSessionConfig {
@Autowired
private RedisSentinelProperties redisSentinelProperties;
LettuceClientConfiguration clientConfig = LettuceClientConfiguration.builder()
.readFrom(SLAVE_PREFERRED)
.build();
private Set<String> sentinelHostAndPorts(){
Set<String> nodes = redisSentinelProperties.getSentinel().getNodes().stream().collect(Collectors.toSet());
return nodes;
}
//This is where NullPointerException is thrown line 37 in the stack trace
RedisSentinelConfiguration sentinelConfig = new RedisSentinelConfiguration(redisSentinelProperties.getMasterName(), sentinelHostAndPorts());
@Bean
public LettuceConnectionFactory connectionFactory() {
return new LettuceConnectionFactory(sentinelConfig, clientConfig);
}
}
Ниже приведена трассировка стека
Вызывается: java.lang.NullPointerException
в com.bt.consumer.configpropertiesdemo.config.RedisHttpSessionConfig. (RedisHttpSessionConfig.java:37)
в com.bt.consumer.configpropertiesdemo.config.RedisHttpSessionConfig $$ EnhancerBySpringCGLIB $$ f6d40824. ()
at sun.reflect.NativeConstructorAccessorImpl.newInstance0 (собственный метод)
at sun.reflect.NativeConstructorAccessorImpl.newInstance (NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance (DelegatingConstructorAccessorImpl.java:45)
в java.lang.reflect.Constructor.newInstance (Constructor.java:423)
в org.springframework.beans.BeanUtils.instantiateClass (BeanUtils.java:172)