当前位置: 首页 > 知识库问答 >
问题:

Spring Boot控制台应用程序使用线程进行全局异常处理。未调用setDefaultUncaughtExceptionHandler

费明诚
2023-03-14

我有一个Spring Boot控制台应用程序(即不是MVC或REST),我需要设置一个全局异常处理@ControlerAdvice/@Messagehandler显然不是和选项,所以我尝试使用线程。改为设置DefaultUncaughtExceptionHandler。观察到,在抛出异常后,线程。未调用setDefaultUncaughtExceptionHandlerhandler。我正在寻求建议,以解释为什么这不起作用,或者建议使用不同的策略

@IntegrationComponentScan
@EnableIntegration
public class BatchLoaderCliApplication  {
    @PostConstruct
    public void init() {
        Thread.setDefaultUncaughtExceptionHandler((t,e)->System.out.println("in exception handler"));

    }

    @Bean
    public ApplicationRunner runner() {
        return args -> {
                   System.out.println(1/0)
                };
        }

java.lang.IllegalStateExcema:未能在org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:773)在org.springframework.boot.SpringApplication.callRunner(SpringApplication.java:760)在org.springframework.boot.SpringApplication.run(SpringApplication.java:318)atorg.springframework.boot.SpringApplication.run(SpringApplication.java:1213)atorg.springframework.boot.SpringApplication.run(SpringApplication.java:1202)atcom.somecom.batchloader.BatchLoaderCliApplication.main(BatchLoaderCliApplication.java:54)导致:java.lang.算术异常:/由零在com. Somecom. batchloader。1美元(BatchLoaderCliApplication. java: 117)在org. springframework. boot。SpringApplication. call Runner(SpringApplication. java: 770)...5 more

共有1个答案

饶滨海
2023-03-14

Spring Boot有一个默认机制,使用注册的SpringBootExceptionReporter实现。默认情况下,有一个任务委托给FailureAnalyzer实现,最后将结果传递给FailureAnalysisReporter

对于自定义处理,您可以选择

  • 注册您的自定义SpringBootExceptionER以扩展/覆盖默认行为
  • 注册自定义FailureAnalyzer以处理特定异常
  • 注册一个自定义的FailureAnalysis记者来处理不同的所有故障

注册是通过添加一个本地文件META-INF/spring来完成的。工厂,其中包含一行(属性格式),以完整的spring接口名称作为键,所有实现作为值(逗号分隔)。

 类似资料:
  • 我有一个带post请求的控制器。我试图用一个简单的NotNull注释验证POJO。我正在使用ControllerAdvice来处理异常。 所以我尝试使用它,但当我启动应用程序时,我得到了以下信息: 因此,我想为BindException创建自己的处理程序,但当我为BindException类创建ExceptionHandler时,spring应用程序不会启动。如果我注释掉handleBindExc

  • 我是一个有Spring和Spring靴的新手。在创建了一个简单的REST API来对用户执行CRUD操作之后,我还创建了自定义的异常处理程序来捕获应用程序中发生的任何异常。这是我写的代码 controller类 使用@ControllerAdvice注释的异常处理程序类 但是,当发生任何异常时,应用程序将被重定向到/error page,而不是由异常处理程序类处理。谁能给出正确的方法来做这件事。

  • 问题内容: 有没有一种方法可以在Java中创建全局异常处理程序。我想这样使用: 处理程序可能无法捕获在主体中引发的异常。 马丁 问题答案: 使用Thread.setDefaultUncaughtExceptionHandler。有关示例,请参见Rod Hilton的“ Global Exception Handling ”博客文章。

  • 我有一个Groovy Spring Boot微服务,它返回一个帖子列表。请求进入控制器,控制器调用服务类中的方法,如果没有找到POST,则抛出自定义错误消息。 我已经创建了一个带有@ControllerAdvice注释的控制器,我想截获错误,并创建了一个特定于自定义错误的处理程序。它应该返回一个POJO。目前正在调用ControllerAdvice处理程序,但来自microservice的响应是5

  • 问题内容: 我问一个有关如何覆盖默认的Java异常处理问题,被告知的答案在这里。 现在的问题是:是否有一种方法可以将该处理程序泛化为所有线程,而无需在每个线程中明确声明? 我认为应该可以某种方式获取所有线程,然后将其绑定到异常处理程序? 问题答案: 使用。正如javadoc所说: “通过设置默认的未捕获异常处理程序,应用程序可以更改那些已经接受系统提供的任何“默认”行为的线程的未捕获异常处理方式(

  • 问题内容: 我有一个应用程序,需要编写一个自定义的全局未捕获的异常处理程序。我已经阅读了所有stackoverflow线程,并且其中每个线程都只是缺少一个清晰而简单的示例,说明了如何实现这一点。 考虑以下简单示例: 它抛出一个标准异常,它只是一个标准输出。我如何实现自己的异常,该异常可以通过将错误输出到日志文件中的简单方法覆盖标准异常?显然,实际的应用程序要大得多,我们正在谈论未捕获的异常,这就是