gpt4 book ai didi

spring - 如果我们在 @PostConstract 中得到异常,@PreDestroy 方法调用是否被授予

转载 作者:行者123 更新时间:2023-12-02 03:25:24 26 4
gpt4 key购买 nike

我有 SpringBoot 应用程序,它加载一些配置并在用 @PostConstract 注释的方法中运行长时间处理。如果应用程序成功完成或出现错误,则应释放一些资源。

问题是如何最正确地释放应用资源?这是否足以在 @PreDestroy 带注释的方法中实现它,或者我还应该在 @PostConstract 带注释的方法中捕获异常。

@SpringBootApplication
@Import(MyConfiguration.class)
public class MySpringApplication {

@Autowire
ProcessRunner processRunner;

@Autowire
ResourceBean resourceBean;

public static void main(String[] args) {
SpringApplication.run(MySpringApplication.class, args);
}

@PostConstruct
void postConstruct {
try {
processRunner.run()
} catch (Exception ex) {
// Do we really need this Exception handling to release resource?
resourceBean.release();
}
}

@PreDestroy
void preDestroy() {
resourceBean.release();
}
}

最佳答案

预销毁当上下文释放 bean 时(即:上下文关闭时)用作回调。这意味着 PreDestroy 不与 PostConstruct 耦合。如果该bean存在于上下文中并且被释放,则会调用predestroy。

构建后旨在初始化bean。如果抛出异常,应用程序将不会启动。

那么,回答你的问题...

is predestroy-method-call granted if we get an exception in postconstract?

PreDestroy 和 PostConstruct 不耦合。这意味着,如果 PostConstruct 遇到异常但以某种方式进行管理并且该方法成功结束,则该 bean 将被初始化并且它将在上下文中可用。当时间到来并且上下文关闭时,bean 将被释放并调用 PreDestroy。

如果 PostConstruct 抛出异常,Bean 将在上下文中不可用(并且应用程序不会启动),因此不会调用 PreDestroy。

The question is how to make the most correct release of application resources? Is that enough to make it in @PreDestroy annotated method or I should also catch the exception in @PostConstract annotated method?

您应该捕获异常并释放所有非托管资源。这也适用于 JEE,它指定作为最佳实践,必须以编程方式处理在上下文之外获取的资源。

关于spring - 如果我们在 @PostConstract 中得到异常,@PreDestroy 方法调用是否被授予,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760613/

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