问。如何关闭spring引导上下文,通过使用 @SpringBootTest
,然后JUnit5停止jvm(调用添加了 addShutdownHook()
) ?
例子:
假设是这样的豆子
@Component
public class SomeBean implements DisposableBean {
public SomeBean() {
var hook = new Thread(() -> System.out.println("Shutdown Hook called"));
Runtime.getRuntime().addShutdownHook(hook);
}
@Override
public void destroy() {
System.out.println("Destroy called");
}
}
简单的junit 5测试如下:
@SpringBootTest
class TestJvmShutdownHookApplicationTests {
@Test
void contextLoads() {
}
}
我怎样才能接到你的电话 destroy()
在jvm关闭挂钩之前执行?
2021-02-18 13:54:24.540 INFO 18928 --- [ main] .a.t.TestJvmShutdownHookApplicationTests : Started TestJvmShutdownHookApplicationTests in 2.378 seconds (JVM running for 3.687)
Shutdown Hook called
2021-02-18 13:54:24.863 INFO 18928 --- [extShutdownHook] o.s.s.concurrent.ThreadPoolTaskExecutor : Shutting down ExecutorService 'applicationTaskExecutor'
Destroy called
背景 it.ozimov:embedded-redis
添加一个jvm关闭钩子并在bean之前关闭redis服务器 redisConnectionFactory
(莴苣)被毁。
1条答案
按热度按时间nr9pn0ug1#
目前还没有实现这一目标的内置支持。
有关更多详细信息,请参阅spring框架的问题跟踪器中的closeallapplicationcontext框架中的closeallapplicationcontext问题。
目前,正确关闭
ApplicationContext
SpringTestContext框架通过@DirtiesContext
还是一种习俗TestExecutionListener
这就需要TestContext#markApplicationContextDirty(...)