上下文暂停

自Spring Framework 7.0起,存储在上下文缓存中(见 上下文缓存)的ApplicationContext,当它不再被积极使用时,可能会被 暂停,并且下次从缓存中检索上下文时会自动重启。具体来说,这将重启应用程序上下文中所有的 自动启动bean,有效地恢复生命周期状态。这确保了当上下文未被测试使用时,上下文中的后台进程不会活跃运行。例如,JMS监听容器、计划任务以及上下文中实现LifecycleSmartLifecycle 的任何其他组件,在上下文再次被测试使用之前,都将处于“停止”状态。但是,请注意,SmartLifecycle组件可以通过从 SmartLifecycle#isPauseable()方法返回false来选择不暂停。spring-doc.cadn.net.cn

可以通过设置以下支持的值之一来控制是否应暂停非活动的应用上下文:PauseModespring-doc.cadn.net.cn

ALWAYS

总是暂停非活动的应用上下文。spring-doc.cadn.net.cn

ON_CONTEXT_SWITCH

仅当从上下文缓存中检索到的下一个上下文是不同的上下文时,才暂停非活动的应用上下文。spring-doc.cadn.net.cn

NEVER

从不暂停非活动的应用上下文,实际上禁用了上下文缓存的暂停功能。spring-doc.cadn.net.cn

默认情况下,PauseMode 设置为 ON_CONTEXT_SWITCH,但可以通过命令行或构建脚本更改,方法是设置名为 spring.test.context.cache.pause 的 JVM 系统属性为受支持的值之一(不区分大小写)。作为替代方案,您也可以通过 SpringProperties 机制设置该属性。spring-doc.cadn.net.cn

例如,如果您希望非活动的应用上下文始终处于暂停状态,可以通过将默认的ON_CONTEXT_SWITCH模式更改为ALWAYS,方法是将spring.test.context.cache.pause系统属性设置为alwaysspring-doc.cadn.net.cn

-Dspring.test.context.cache.pause=always

同样地,如果您遇到Lifecycle组件无法或不应选择不暂停的问题,或者发现由于应用程序上下文的暂停和重启导致测试套件运行变慢,您可以通过将spring.test.context.cache.pause系统属性设置为never来禁用暂停功能。spring-doc.cadn.net.cn

-Dspring.test.context.cache.pause=never