我有以下类:
@EnableRedisIndexedHttpSession(maxInactiveIntervalInSeconds = 2000) public class MyApplication {
字符串我想在maxInactiveIntervalInSeconds中放入一个来自Spring属性文件的值(而不是硬编码的2000)。我不能在那里使用@Value。你知道吗?提前感谢!
maxInactiveIntervalInSeconds
2000
flvlnr441#
从技术上讲,它甚至比这简单得多。我假设你正在使用**Sping Boot **,所以我们将引用3.2.0-RC1 Spring位(Sping Boot 和Spring Session)。早期版本,特别是3.x行,功能应该是相同的。你肯定不想养成直接扩展Spring Session for Redis,RedisIndexedHttpSessionConfiguration class(Javadoc)的习惯,部分原因是这正是@EnableRedisIndexedHttpSession annotation“imports”(Javadoc)的类,Spring Session和Sping Boot 都让“定制”变得容易。Spring Boot 方式:您可以简单地在Sping Boot application.properties中设置以下属性:
3.2.0-RC1
3.x
RedisIndexedHttpSessionConfiguration
@EnableRedisIndexedHttpSession
application.properties
# Your Spring Boot / Spring Session application.properties spring.session.timeout=2000s
字符串请参阅有关spring.session.timeout属性的Sping Boot 文档。Sping Boot 使用的fallback属性是:server.servlet.session.timeout个这从Sping Boot 自动配置(源代码)中可以明显看出。SPRING SESSION WAY(不带 Spring Boot ):当你不使用Sping Boot 时,这甚至很简单。只需从Spring Session注册一个类型为SessionRepositoryCustomizer(Javadoc)的bean,如下所示:
spring.session.timeout
server.servlet.session.timeout
SessionRepositoryCustomizer
@EnableRedisIndexedHttpSession class CustomSpringSessionConfiguration { @Bean SessionRepositoryCustomizer<RedisIndexedSessionRepository> customizer( @Value("${my.session.timeout:2000}") int sessionTimeoutSeconds) { return repository -> repository.setDefaultMaxInactiveInterval(sessionTimeoutSeconds); } }
型注意事项:事实上,上面的Spring Session自定义配置代码正是Sping Boot 自己正在做的,当然,考虑到其他Spring [Web [Session]]配置;再次查看完整的源代码。然后,您的my.session.timeout属性可以从Spring的Environment支持的任何位置配置为“属性源”,包括但不限于:Java系统属性,属性文件,环境变量等,包括您自己的自定义实现,这与Sping Boot 已经为您提供的实现没有什么不同。
my.session.timeout
Environment
nnsrf1az2#
正如document所说,更高级的配置可以扩展RedisIndexedHttpSessionConfiguration。尝试创建自己的配置来覆盖RedisIndexedHttpSessionConfiguration
@Configuration(proxyBeanMethods = false) @EnableConfigurationProperties(MyRedisSessionProperties.class) public class CustomRedisIndexedHttpSessionConfiguration extends RedisIndexedHttpSessionConfiguration { private final MyRedisSessionProperties myRedisSessionProperties; @Autowired void customize(MyRedisSessionProperties properties) { setMaxInactiveIntervalInSeconds((int) properties.getMaxInactiveInterval().getSeconds()); } @ConfigurationProperties("my.redis.session") static class MyRedisSessionProperties { private Duration maxInactiveInterval; public Duration getMaxInactiveInterval() { return this.maxInactiveInterval; } public void setMaxInactiveInterval(Duration maxInactiveInterval) { this.maxInactiveInterval = maxInactiveInterval; } } }
字符串application.property
my.redis.session.max-inactive-interval=1h
型
2条答案
按热度按时间flvlnr441#
从技术上讲,它甚至比这简单得多。
我假设你正在使用**Sping Boot **,所以我们将引用
3.2.0-RC1
Spring位(Sping Boot 和Spring Session)。早期版本,特别是3.x
行,功能应该是相同的。你肯定不想养成直接扩展Spring Session for Redis,
RedisIndexedHttpSessionConfiguration
class(Javadoc)的习惯,部分原因是这正是@EnableRedisIndexedHttpSession
annotation“imports”(Javadoc)的类,Spring Session和Sping Boot 都让“定制”变得容易。Spring Boot 方式:
您可以简单地在Sping Boot
application.properties
中设置以下属性:字符串
请参阅有关
spring.session.timeout
属性的Sping Boot 文档。Sping Boot 使用的fallback属性是:
server.servlet.session.timeout
个这从Sping Boot 自动配置(源代码)中可以明显看出。
SPRING SESSION WAY(不带 Spring Boot ):
当你不使用Sping Boot 时,这甚至很简单。只需从Spring Session注册一个类型为
SessionRepositoryCustomizer
(Javadoc)的bean,如下所示:型
注意事项:事实上,上面的Spring Session自定义配置代码正是Sping Boot 自己正在做的,当然,考虑到其他Spring [Web [Session]]配置;再次查看完整的源代码。
然后,您的
my.session.timeout
属性可以从Spring的Environment
支持的任何位置配置为“属性源”,包括但不限于:Java系统属性,属性文件,环境变量等,包括您自己的自定义实现,这与Sping Boot 已经为您提供的实现没有什么不同。nnsrf1az2#
正如document所说,
更高级的配置可以扩展RedisIndexedHttpSessionConfiguration。
尝试创建自己的配置来覆盖
RedisIndexedHttpSessionConfiguration
字符串
application.property
型