gpt4 book ai didi

java - 如何控制Spring Boot启动异常?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:01:31 25 4
gpt4 key购买 nike

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

证书文件正在@Component 类中的@PostConstruct 方法中加载。如果它抛出 FileNotFoundException,我会捕获它并抛出我创建的特定异常。在任何情况下我都需要抛出异常,因为我不希望在未读取该文件时加载应用程序。

我试过这个:

@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());
}
}
}
}
}

但是在run方法内部并没有抛出异常。

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

最佳答案

您可以捕获 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中并抛出。

关于java - 如何控制Spring Boot启动异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50627350/

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