仅在生产环境中设置 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})
是否可以仅在 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})