-
Notifications
You must be signed in to change notification settings - Fork 38.6k
Description
Overview
Since the introduction of the Spring TestContext Framework in 2007, application contexts have always been stored in the context cache in a "running" state. However, leaving a context running means that components in the context may continue to run in the background. For example, JMS listeners may continue to consume messages from a queue; scheduled tasks may continue to perform active work, etc.; and this can lead to issues within a test suite.
To address such issues, we should introduce built-in support for pausing application contexts when they are not in use and restarting them if they are needed again.
Related Issues
- SmartLifecycle beans are not closed in @SpringBootTest spring-boot#28312
- Introduce
ConfigurableApplicationContext.restart()
method #35171
Original Issue Description
There have been several reports of message listeners still actively listening while being the in the application context cache during integration tests. There does not seem to be a mechanism to keep these listener beans in the cache while also switching off the listening.
Would it make sense to extend the SmartLifecycle
interface?
Something like onEnterActiveContext
and onLeaveActiveContext
could be intercepted in the listener beans to toggle the listening. These methods would be called when a bean moves into or out of the active application context. It's not the same as start
and stop
, which are only called when the bean is loaded for the first time and when the application shuts down.