When I run this, it does log out every 30 seconds, but the system time and time range never change...?
Why is that?
Do I need to remove @Component? Or should I change the val variables to var?
Function
@Component
internal class SessionEvicter(
private val redisOperations: ReactiveRedisOperations<String, String>,
springSessionProperties: SpringSessionProperties,
) {
private val logger = LoggerFactory.getLogger(SessionEvicter::class.java)
private val redisKeyLocation = springSessionProperties.redis?.expiredSessionsNamespace
?: "spring:session:sessions:expirations"
// run every 120 seconds
@Scheduled(fixedRate = 30, timeUnit = TimeUnit.SECONDS)
fun cleanup(): Mono<Void> {
val now = Instant.now()
val pastFiveDays = now.minus(Duration.ofDays(5))
val range = Range.closed(
(pastFiveDays.toEpochMilli()).toDouble(),
(now.toEpochMilli()).toDouble()
)
val limit = Limit.limit().count(500)
// get the ZSet (Sorted Set) operations
val zSetOps = redisOperations.opsForZSet()
return zSetOps.reverseRangeByScore(redisKeyLocation, range, limit)
.collectList()
.flatMap { sessionIdsList ->
// Detailed logging
logger.info("Scheduled cleanup execution started.")
logger.info("Current time (now): $now")
logger.info("Time range start: ${Date(pastFiveDays.toEpochMilli())}")
logger.info("Time range end: ${Date(now.toEpochMilli())}")
logger.info("Limit count: ${limit.count}")
logger.info("Redis key location: $redisKeyLocation")
if (sessionIdsList.isNotEmpty()) {
logger.info("Found ${sessionIdsList.size} sessions to remove.")
val removal = zSetOps.remove(
redisKeyLocation,
*sessionIdsList.toTypedArray()
)
removal
} else {
logger.info("No sessions found to remove.")
Mono.empty()
}
}
.doOnSuccess {
logger.info("Scheduled session cleanup check completed.")
}
.doOnError { e ->
logger.error("Error during session cleanup check: ${e.message}")
}
.then()
}
}
Console log
2024-09-01T15:47:41.781+01:00 INFO 65800 --- [BFFApplication] [xecutorLoop-3-2] c.f.bff.auth.sessions.SessionEvicter : Current time (now): 2024-09-01T14:46:10.273882Z
2024-09-01T15:48:11.779+01:00 INFO 65800 --- [BFFApplication] [xecutorLoop-3-5] c.f.bff.auth.sessions.SessionEvicter : Current time (now): 2024-09-01T14:46:10.273882Z
Not sure what is going on, but my session evictor doesn't really work as it stays locked into the same time range, set when Spring Boot loads up
Comment From: bclozel
Thanks for getting in touch, but it feels like this is a question that would be better suited to StackOverflow. As mentioned in the guidelines for contributing, we prefer to use GitHub issues only for bugs and enhancements. Feel free to update this issue with a link to the re-posted question (so that other people can find it) or add some more details if you feel this is a genuine bug.