mirror of
https://github.com/spring-projects/spring-framework.git
synced 2026-09-27 17:49:02 +00:00
Pause unused application contexts in the TestContext framework
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, this commit introduces built-in support for pausing application contexts when they are not in use and restarting them if they are needed again. Specifically, the TestContextManager now marks a test's application context as "unused" after execution of the test class has ended, and the underlying ContextCache then "stops" the application context if no other test class is currently using the context. When a TestExecutionListener later attempts to obtain a paused application context -- for example, for a subsequent test class that shares the same application context -- the ContextCache ensures that context is restarted before returning it. See https://github.com/spring-projects/spring-boot/issues/28312 See gh-35171 Closes gh-35168
This commit is contained in:
+9
@@ -62,6 +62,15 @@ script by setting a JVM system property named `spring.test.context.cache.maxSize
|
||||
alternative, you can set the same property via the
|
||||
xref:appendix.adoc#appendix-spring-properties[`SpringProperties`] mechanism.
|
||||
|
||||
As of Spring Framework 7.0, an application context stored in the context cache will be
|
||||
stopped when it is no longer actively in use and automatically restarted the next time
|
||||
the context is retrieved from the cache. Specifically, the latter will restart all
|
||||
auto-startup beans in the application context, effectively restoring the lifecycle state.
|
||||
This ensures that background processes within the context are not actively running while
|
||||
the context is not used by tests. For example, JMS listener containers, scheduled tasks,
|
||||
and any other components in the context that implement `Lifecycle` or `SmartLifecycle`
|
||||
will be in a "stopped" state until the context is used again by a test.
|
||||
|
||||
Since having a large number of application contexts loaded within a given test suite can
|
||||
cause the suite to take an unnecessarily long time to run, it is often beneficial to
|
||||
know exactly how many contexts have been loaded and cached. To view the statistics for
|
||||
|
||||
Reference in New Issue
Block a user