仅在生产环境中设置 Spring Session Redis

Set Spring Session Redis on production only

是否可以仅在 production 配置文件上设置 Spring 会话数据 redis 模块?

我曾尝试使用 @Profile,但 AbstractHttpSessionApplicationInitializer 在设置 profile/environment 之前已初始化,因此会给我一个 NoSuchBean 异常

NoSuchBeanDefinitionException: No bean named 'springSessionRepositoryFilter' available

当我尝试使用 @Values 注入配置文件时,它 returns 空值。

@Value("${spring.profiles.active:local}")
private String activeProfile; // result is null

我已经使用 this article 解决了问题。

生产会话配置将是这样的。

@Configuration
@ConditionalOnProperty(name = "spring.profiles.active", havingValue = "production")
@EnableRedisHttpSession
@ConfigurationProperties(prefix = "redis.db")
public class ProductionSessionConfig {

    @Setter
    private String server;
    @Setter
    private Integer port;

    @Bean
    public JedisConnectionFactory connectionFactory() {
        //creates your own connection
        RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(server, port);
        return new JedisConnectionFactory(config);
    }

}

如果您不打算在其他环境中使用 spring-session-data-redis。你可以继续。请记住 @ConditionalOnProperty 值。

并且不要忘记排除会话的自动配置。

@SpringBootApplication(exclude = {SessionAutoConfiguration.class})