我在main方法中有阻止程序问题“关闭此“ConfigurableApplication ationContext”
public static void main(String[] args)
{
SpringApplication.run(MyApplication.class, args);
}
我尝试了SonarQube示例中的代码
public static void main(String[] args)
{
ConfigurableApplicationContext context = null;
try
{
context = SpringApplication.run(MyApplication.class, args);
}
finally
{
if (context != null) {
context.close();
}
}
}
但它在开始后立即关闭上下文。
如何解决此问题?
我一直在想,这是错误的/积极的。
但是你可以用这几行来测试。
@RunWith(SpringRunner.class)
@SpringBootTest
public class YourApplicationTest {
@Test
public void shouldLoadApplicationContext() {
}
@Test
public void applicationTest() {
YourApplication.main(new String[] {});
}
}
现在声纳说,这是经过测试的!
(称赞:罗伯特@https://stackoverflow.com/a/41775613/863403)
如果您有一个Web应用程序,应用程序上下文将被销毁(我认为通过ContextLoaderListener
,不确定),不需要显式代码。
对于命令行应用程序,必须手动销毁上下文,否则将无法正确销毁bean-@PreDestroy方法将不会被调用。例如:
@Bean
public ApplicationRunner applicationRunner() {
return new ApplicationRunner() {
public void run(ApplicationArguments args) throws Exception {
try {
doStuff();
} finally {
context.close();
}
}
当我的Spring Boot命令行应用程序完成后,Cassandra会话保持打开状态时,我注意到了这一点。
SonarQube报告的问题是误报,应该忽略。SonarQube的常见问题解答列出了一些消除误报的选项:
您可以将单个问题标记为假阳性,或者无法通过问题界面修复。然而,这种解决方案不能跨分支工作-您必须为分析中的每个分支重新标记问题误报。因此,如果正在分析项目的多个分支,则代码内方法可能更可取:
您可以使用嵌入在规则引擎(//NOPMD…)中的机制或在SonarQube中实现的通用机制:将//NOSONAR放在问题行的末尾。这将抑制该问题。
您可以直接从用户界面查看问题,将其标记为假阳性。
** 注意:当我尝试使用具有相同命令的Jenkins job关闭服务器时(并且运行的Jenkins服务器具有与本地服务器相同的pom和属性),我得到了以下异常:
我尝试了一个显示其他响应的测试用例,我将一步一步地解释它: > 我在我的设备上安装了MDM配置文件,这提示我安装了一个应用程序,并且我成功地安装了它。应用程序已进入“应用程序中的配置文件”部分。 然后我手动删除了应用程序。
< b >想改进这个问题?通过编辑此帖子添加详细信息并澄清问题。 我正在尝试将一个日食项目从 GitHub 导入到智能中。但是,我在找出正确的方法时遇到了问题。 我正在按照这个问题进行导入(我将所有内容都保留为默认值,只需单击“下一步”,因为答案没有提到其他内容,我也不知道其他内容做了什么),但它仍然不起作用。配置/项目结构似乎严重损坏,我不知道为什么。 因为这里有这么多未知的东西,所以我决定问问
在单元测试中启动和正常关闭Spring应用程序的推荐方法是什么?我知道JUnit5的SpringExtension,但它在测试方法执行之前/之后启动和停止Spring上下文。 我想用测试方法启动和停止spring上下文,因为我想验证是否调用了某些方法(尤其是在关机期间)。 有没有推荐的方法来实现这一点?
我使用spring application builder从父应用程序运行子上下文应用程序(spring Cloud task)。我还将运行的父上下文传递给子应用程序的构建器——它定义了DataSource bean,我希望它也能被task使用。 我的问题是,当关闭子上下文时,所有父bean也会被销毁。我做错什么了吗? 如何将父上下文中的bean与子上下文共享,并且在子上下文退出时仍然保持它们的活