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

如何控制Spring Boot启动时的异常?

陈兴朝
2023-03-14

我的Spring Boot应用程序试图在启动时加载一些证书文件。我希望能够在文件无法加载时显示一个明智的消息,而不是一个巨大的堆栈跟踪。

@SpringBootApplication
public class FileLoadTestApplication {
    public static void main(String[] args) {
        try {
            SpringApplication.run(FileLoadTestApplication .class, args);
        } catch (Exception e) {
            LOGGER.error("Application ending due to an error.");
            if (e.getClass().equals(ConfigException.class)) {
                if (e.getCause().getClass().equals(FileNotFoundException.class)) {
                    LOGGER.error("Unable to read file: " + e.getCause().getMessage());
                } else {
                    LOGGER.error("Initial configuration failed.", e.getCause());
                }
            }
        }
    }
}

如何在启动时控制一些异常,以便在关闭前显示一条信息性消息?

共有1个答案

公冶弘壮
2023-03-14

您可以捕获BeanCreationException并将其展开以获取原始原因。您可以使用以下代码片段

public static void main(String[] args) {
    try {
        SpringApplication.run(FileLoadTestApplication.class, args);
    } catch (BeanCreationException ex) {
        Throwable realCause = unwrap(ex);
        // Perform action based on real cause
    }
}

public static Throwable unwrap(Throwable ex) {
    if (ex != null && BeanCreationException.class.isAssignableFrom(ex.getClass())) {
        return unwrap(ex.getCause());
    } else {
        return ex;
    }
}

@PostConstruct注释方法抛出异常时,Spring将其包装在BeanCreationException中并抛回。

 类似资料:
  • 我有一个spring-boot应用程序,没有任何控制器类。如何为该应用程序编写异常处理程序。用@ControllerAdvice注释的异常处理程序类不起作用。

  • 我已经安装了tarantool(tarantool_box)和tarantool客户端。我可以开始塔兰托了 但是当我试图连接到服务器时 我只看到管理员控制台 并且只能使用一些命令和类似sql的查询。我无法使用《用户指南》中的任何命令,并且几乎所有以开头的命令都会失败:

  • 问题内容: 我希望在启动应用程序并开始在我拥有的文本字段中键入内容时,键盘向上滑动。 问题答案: 在您的方法中,添加以下内容: 有关详细信息的,查看文档。

  • 过去几天我一直在处理phpmyadmin。一切工作都很好,直到我看到这个问题,但昨天没有。 我不明白的是,这几天问题都不在那里,所以我真的不知道出了什么问题。 我尝试从我的目录中删除文件夹,但每次我在xampp控制面板上启动mysql,它都会一次又一次地出现。 谁能给我一个妥善的解决办法吗?我会非常感激的。谢谢你。

  • The ConsoleLauncher is a command-line Java application that lets you launch the JUnit Platform from the console. For example, it can be used to run JUnit Vintage and JUnit Jupiter tests and print test

  • 我的springboot微服务依赖于AS400 DB2,当服务启动时,它可能会关闭。该服务有一个配置bean,它有autowired的基于JpaRepository的存储库。在启动期间,当DB2关闭时,我得到以下消息: