|
此版本仍在开发中,尚未被视为稳定版。如需最新稳定版本,请使用 Spring Framework 7.0.6! |
上下文暂停
从 Spring Framework 7.0 开始,存储在上下文缓存中的 ApplicationContext(参见
上下文缓存)在不再被主动使用时可以被暂停,并在下次从缓存中检索该上下文时自动重新启动。具体而言,后者将重新启动应用上下文中的所有自动启动的 Bean,从而有效地恢复其生命周期状态。
这确保了当上下文未被测试使用时,其中的后台进程不会处于活跃运行状态。例如,JMS 监听器容器、调度任务以及上下文中任何实现了 Lifecycle 或 SmartLifecycle 接口的其他组件,在上下文再次被测试使用之前都将处于“已停止”状态。但请注意,
SmartLifecycle 组件可以通过在其 false 方法中返回 SmartLifecycle#isPauseable() 来选择不参与暂停。
你可以通过将 PauseMode 设置为以下支持的值之一,来控制是否应暂停非活跃的应用上下文。
ALWAYS-
始终暂停非活跃的应用上下文。
ON_CONTEXT_SWITCH-
仅当从上下文缓存中检索到的下一个上下文是不同的上下文时,才暂停非活动的应用上下文。
NEVER-
从不暂停非活动的应用上下文,从而有效地禁用上下文缓存的暂停功能。
PauseMode 的默认值为 ON_CONTEXT_SWITCH,但可以通过命令行或构建脚本将名为 spring.test.context.cache.pause 的 JVM 系统属性设置为支持的某个值(不区分大小写)来更改它。或者,您也可以通过 SpringProperties 机制来设置该属性。
例如,如果你希望非活动的应用上下文始终处于暂停状态,可以通过将 ON_CONTEXT_SWITCH 系统属性设置为 ALWAYS,从而将默认的 spring.test.context.cache.pause 模式切换为 always。
-Dspring.test.context.cache.pause=always
同样地,如果你遇到 Lifecycle 组件的问题,这些组件无法或不应选择退出暂停行为,或者你发现由于应用程序上下文的暂停和重启导致测试套件运行变慢,你可以通过将系统属性 spring.test.context.cache.pause 设置为 never 来禁用暂停功能。
-Dspring.test.context.cache.pause=never