【发布时间】:2019-02-18 05:13:17
【问题描述】:
这不是关于如何处理 Spring MVC 中的异常或其他任何东西。我特别需要处理 spring 开始时可能发生的异常,即在整个应用程序上下文甚至初始化之前。
对于一些背景知识,有问题的应用程序是一个允许远程访问电子设备的 IoT 节点。它内置了一个小的 h2 数据库来保存一些数据。这些数据在某些时候很不错,但对于应用程序的工作来说并不是必不可少的。
碰巧运行应用程序的设备偶尔会断电,如果在对数据库进行写操作时发生这种情况,则文件已损坏并且将出现 JdbcSQLException当应用程序尝试再次启动时抛出。 由于数据并不是真正重要的,使应用程序再次工作的最简单方法是删除数据库并让 h2 重新创建它。但为了做到这一点,我必须捕获异常,以便对它做出反应。应用程序不必必须继续启动,它将由 systemd 再次启动。我真的只需要识别异常并删除文件,就是这样。
有一种明显的方法可以做到这一点,即将 SpringApplication.run 放在 try-catch 块中。但这也很丑陋,因为我得到了我正在寻找的异常嵌套在由 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
我的问题是,有没有办法注册某种异常处理程序或其他方式,以便在异常发生时直接处理异常,这样我可以更轻松地识别它?
【问题讨论】:
标签: java spring spring-boot