gpt4 book ai didi

java - 如何在方法退出时不使 Spring Boot 应用程序终止

转载 作者:行者123 更新时间:2023-11-30 07:13:41 24 4
gpt4 key购买 nike

我正在尝试围绕 Spring Boot 应用程序编写一些集成测试

我不想使用在每次测试时启动应用程序的 SpringJunitRunner。这是因为我有很多测试,并且我不想为每个测试启动一次应用程序。另外,有一些东西与我公司的基础设施集成,第二次测试在启动 spring 应用程序时总是失败(因为其他一些上下文只能创建一次)

所以我的想法是使用 TestNG 并在套件启动时启动应用程序一次,并使测试针对应用程序运行,然后关闭应用程序

我能够启动该应用程序,但它在启动它的方法退出后不久就终止了。有没有办法让应用程序上线

我创建了一个单例类来管理应用程序生命周期

  public final class IntegrationTestContext {



private static IntegrationTestContext INSTANCE = null;

private Boolean isInitialized = false;

private ConfigurableApplicationContext applicationContext;

SpringApplication app = null;

public static synchronized IntegrationTestContext getInstance() {

if (INSTANCE == null){
INSTANCE = new IntegrationTestContext();
}

return INSTANCE;
}

private IntegrationTestContext() {
if (!isInitialized) {
runApplication();
isInitialized = true;
}
}

public ApplicationContext getContext() {
return applicationContext;
}



private PropertySourcesPlaceholderConfigurer getBeanFactoryPostProcessor(){
Properties properties = new Properties();
properties.setProperty("some.companyrelated.property.1", "false");
properties.setProperty("some.companyrelated.property.2", "false");
PropertySourcesPlaceholderConfigurer pph = new PropertySourcesPlaceholderConfigurer();
pph.setProperties(properties);
return pph;
}


/**
* This runs the application and sets the spring application context
* that we can query to get the client beans
*/
private void runApplication() {
try {

final String[] args = {};
app = new SpringApplication(Application.class, ClientConfig.class);
app.setBannerMode(Banner.Mode.OFF);
app.addInitializers(new MyCompanyInitializer());
applicationContext = app.run(args);
applicationContext.addBeanFactoryPostProcessor(getBeanFactoryPostProcessor());
applicationContext.refresh();

}
catch (Exception exception) {

}
}


public void shutDownApplication(){
try {
applicationContext.close();
isInitialized = false;
app = null;
INSTANCE = null;
}
catch (Exception e) {
}
}
}

我面临的问题是,在 runApplication() 方法退出后,Spring 应用程序就会终止。

可以采取什么措施来实现这一目标?在新进程中启动应用程序会起作用吗?

最佳答案

删除了刷新上下文的行并且它起作用了

关于java - 如何在方法退出时不使 Spring Boot 应用程序终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38772279/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com