gpt4 book ai didi

java - Spring Boot @PreDestroy 注释不起作用

转载 作者:行者123 更新时间:2023-12-01 10:35:23 25 4
gpt4 key购买 nike

我是 Spring Boot 的新手,我有一个 Spring Boot 应用程序似乎忽略了 @PreDestroy 注释 - 当我从命令行或通过 Eclipse 运行时,我从来没有看到应用程序时正在运行 @PreDestroy 代码正在关闭(例如通过 ctrl-c)

代码如下...

应用程序.java:

@SpringBootApplication
public class Application {

@Autowired
private MessageProcessor messageProcessor;

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

@PostConstruct
public void init() {
messageProcessor.run();
}

}

消息处理器配置:
@Configuration
public class MessageProcessorConfiguration {

@Bean
public MessageProcessor messageProcessor() {
return new MessageProcessorImpl();
}
}

消息处理器:
public class MessageProcessorImpl implements MessageProcessor {

@Override
public void run() {

while (isActive()) {

}
}


@PreDestroy
public void shutdown() {
System.out.println("MessageProcessorImpl - shutting down");
}

}

最佳答案

上下文创建期间的 Spring Boot 注册关闭钩子(Hook)
org.springframework.context.support.AbstractApplicationContext#registerShutdownHook方法。
结果上下文必须在 crtl+c 组合上关闭(如果您通过 java -jar app.jar cmd 运行您的应用程序),这反过来又会触发您的 @Predestroy 方法。这对我有用。

我在您的代码中没有看到任何注释。我可以建议注释您的 MessageProcessorImpl带有@Component 注释的bean,而不是手动的@Bean 声明。

关于java - Spring Boot @PreDestroy 注释不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43392828/

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