Проблема с @ConfigurationProperties при использовании весенней сессии с Redis - PullRequest
0 голосов
/ 09 мая 2019

Невозможно получить доступ к свойствам при использовании 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)

...