java—如何在调用jvm的shutdown hook之前关闭@springboottest上下文(一次,在所有junit测试之后)

zvokhttg  于 2021-07-23  发布在  Java
关注(0)|答案(1)|浏览(485)

问。如何关闭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 (莴苣)被毁。

nr9pn0ug

nr9pn0ug1#

目前还没有实现这一目标的内置支持。
有关更多详细信息,请参阅spring框架的问题跟踪器中的closeallapplicationcontext框架中的closeallapplicationcontext问题。
目前,正确关闭 ApplicationContext SpringTestContext框架通过 @DirtiesContext 还是一种习俗 TestExecutionListener 这就需要 TestContext#markApplicationContextDirty(...)

相关问题