gpt4 book ai didi

java - spring-boot启动过程中出现异常如何处理?

转载 作者:行者123 更新时间:2023-11-30 06:00:48 29 4
gpt4 key购买 nike

这不是关于如何处理 Spring MVC 中的异常或其他内容。我特别需要处理 Spring 启动时(即在整个应用程序上下文初始化之前)可能发生的异常。

了解一些背景知识,所讨论的应用程序是一个允许远程访问电子设备的物联网节点。它内置了一个小型 h2 数据库来保存一些数据。在某些时候拥有这些数据很好,但对于应用程序的工作来说并不是必需的。

碰巧的是,运行应用程序的设备偶尔会断电,如果在对数据库进行写操作时发生这种情况,则文件会损坏,并且会出现 JdbcSQLException当应用程序尝试再次启动时抛出。由于数据并不是真正重要的,因此使应用程序再次运行的最简单方法是删除数据库并让 h2 重新创建它。但为了做到这一点,我必须捕获异常,以便我可以对其使用react。应用程序不必必须继续启动,它将由systemd 再次启动。我真的只需要识别异常并删除文件,就是这样。

有一种明显的方法可以做到这一点,即将 SpringApplication.run 放在 try-catch block 中。但它也非常丑陋,因为我得到了我正在寻找的异常,该异常嵌套在由 h2 无法启动引起的无数 Spring 异常中。

也有人建议我在实例化数据库的bean中捕获异常,但不幸的是没有实例化它的bean。 DB 充当 Quartz 作业存储,因此完全由 spring 管理。它在代码中的全部存在是属性文件中的以下条目:

spring.quartz.job-store-type=jdbc
spring.quartz.properties.org.quartz.jobStore.misfireThreshold=900000
spring.datasource.name=h2
spring.datasource.url=jdbc:h2:file:${config.folder}controller
spring.datasource.driverClassName=org.h2.Driver

我的问题是,有没有办法注册某种异常处理程序或其他方式,以便在异常发生时直接处理异常,这样我可以更轻松地识别它?

最佳答案

取决于您如何声明 bean。像这样简单地包裹 bean 有什么问题吗?

@Configuration
class Conf {
@Bean
public DB foo() throws JdbcSQLException
{
try
{
return new DB();
}
catch(JdbcSQLException e)
{
deleteDatabase();
throw JdbcSQLException;
}
}

public static void deleteDatabase()
{
//...
}
}

关于java - spring-boot启动过程中出现异常如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52314194/

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