It seems like a pretty common gotcha for applications with more than one type of scheduled task to run into issues when those tasks are long running and the default value for spring.task.scheduling.pool.size is 1.

Virtual threads in Spring Boot obviously helps mitigate this, but for other uses if ThreadPoolTaskScheduler had a dedicated thread to peek the queue and determine if the next RunnableScheduledFuture delay had expired and log a warning, that would make it far easier to diagnose when thread starvation is preventing tasks from running on schedule.