This commit modifies the way the @RecordApplicationEvents annotation works in tests, allowing for capture of events from threads other than the main test thread (async events) and for the assertion of captured event from a separate thread (e.g. when using Awaitility).

This is done by switching the ApplicationEventsHolder to use an InheritedThreadLocal.

There is a mutual exclusion between support of asynchronous events vs support of JUnit5 parallel tests with the @TestInstance(PER_CLASS) mode. As a result, we favor the former and now SpringExtension will invalidate a test class that is annotated (or meta-annotated, or enclosed-annotated) with @RecordApplicationEvents AND @TestInstance(PER_CLASS) AND @Execution(CONCURRENT).

Closes gh-29827

Comment From: simonbasle

cc @odrotbohm

draft as this should probably be slated for 6.1.0

Comment From: simonbasle

Now that main contains work for 6.1.0, this is ready to be reviewed / merged