Spring Boot @PreDestroy注释不起作用

fin*_*bin 6 java spring-boot

我是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)

Mee*_*ack 3

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

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