コンテキストの一時停止

Spring Framework 7.0 以降、コンテキストキャッシュ(コンテキストキャッシングを参照)に保存された ApplicationContext は、アクティブに使用されなくなった場合に一時停止され、次回キャッシュからコンテキストが取得された際に自動的に再起動されるようになりました。具体的には、後者はアプリケーションコンテキスト内のすべての自動起動 Bean を再起動し、ライフサイクル状態を効果的に復元します。これにより、コンテキストがテストで使用されていない間、コンテキスト内のバックグラウンドプロセスがアクティブに実行されないことが保証されます。例: JMS リスナーコンテナー、スケジュールされたタスク、コンテキスト内の Lifecycle または SmartLifecycle を実装するその他のコンポーネントは、コンテキストがテストで再び使用されるまで「停止」状態になります。ただし、SmartLifecycle コンポーネントは、SmartLifecycle#isPauseable() から false を返すことで一時停止をオプトアウトできます。

PauseMode を次のサポートされている値のいずれかに設定することで、非アクティブなアプリケーションコンテキストを一時停止するかどうかを制御できます。

ALWAYS

非アクティブなアプリケーションコンテキストを常に一時停止します。

ON_CONTEXT_SWITCH

コンテキストキャッシュから取得される次のコンテキストが異なるコンテキストである場合にのみ、非アクティブなアプリケーションコンテキストを一時停止します。

NEVER

非アクティブなアプリケーションコンテキストを一時停止しないでください。これにより、コンテキストキャッシュの一時停止機能が事実上無効になります。

PauseMode のデフォルトは ON_CONTEXT_SWITCH ですが、コマンドラインまたはビルドスクリプトから、JVM システムプロパティ spring.test.context.cache.pause をサポートされている値(大文字と小文字は区別されません)に設定することで変更できます。あるいは、SpringProperties メカニズムを使用してプロパティを設定することもできます。

たとえば、非アクティブなアプリケーションコンテキストを常に一時停止したい場合は、spring.test.context.cache.pause システムプロパティを always に設定して、デフォルトの ON_CONTEXT_SWITCH モードから ALWAYS に切り替えることができます。

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

同様に、一時停止をオプトアウトできない、またはオプトアウトすべきでない Lifecycle コンポーネントで問題が発生した場合、またはアプリケーションコンテキストの一時停止と再起動によりテストスイートの実行速度が遅くなることが判明した場合は、spring.test.context.cache.pause システムプロパティを never に設定して一時停止機能を無効にできます。

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