我是Spring Boot的新手,我有一个Spring Boot应用程序似乎忽略了@PreDestroy注释 - 当我从命令行或通过Eclipse运行时,我从来没有看到@PreDestroy代码在应用程序运行时关机(例如通过ctrl-c)
代码如下......
Application.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();
}
}
Run Code Online (Sandbox Code Playgroud)
消息处理器配置:
@Configuration
public class MessageProcessorConfiguration {
@Bean
public MessageProcessor messageProcessor() {
return new MessageProcessorImpl();
}
}
Run Code Online (Sandbox Code Playgroud)
消息处理器:
public class MessageProcessorImpl implements MessageProcessor {
@Override
public void run() {
while (isActive()) {
…
}
}
@PreDestroy
public void shutdown() {
System.out.println("MessageProcessorImpl - shutting down");
}
}
Run Code Online (Sandbox Code Playgroud)
Spring Boot 在上下文创建期间注册关闭钩子,请参阅org.springframework.context.support.AbstractApplicationContext#registerShutdownHook方法。结果上下文必须在crtl+c组合上关闭(如果您通过 cmd 运行应用程序java -jar app.jar),这反过来会触发您的@Predestroy方法。这对我有用。
我在你的代码中没有看到任何注释。我建议您MessageProcessorImpl使用 @Component 注释来注释您的 bean,而不是手动@Bean声明。
| 归档时间: |
|
| 查看次数: |
5711 次 |
| 最近记录: |