当前位置: 首页 > 知识库问答 >
问题:

Spring靴@预拆卸注释不工作

阳福
2023-03-14

我是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");
   }

}

共有3个答案

陈修诚
2023-03-14

尝试在xml中添加此行。

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
赵英资
2023-03-14

Scope(value=ConfigurableBeanFactory.SCOPE_PROTOTYPE)在bean上使用时,@PreDestroy不起作用,因为使用此方法生成的bean不完全由IOC容器管理。

当在bean上使用范围(value=ConfigurableBeanFactory.Scope\u SINGLETON)时,@PreDestroy工作。

赫连瑾瑜
2023-03-14

在创建上下文期间,Spring启动寄存器关闭挂钩请参见org。springframework。上下文支持AbstractApplicationContext#RegisterShotDownhook方法。因此,必须在crtl c组合上关闭上下文(如果您通过java-jar-app.jar运行应用程序),这反过来会触发您的@Predestroy方法。这对我有用。

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

 类似资料:
  • 我发现了许多类似的问题,但没有一个解决了我的问题。我的问题是可以访问的函数 下面是我的spring-security.xml代码。

  • 我的Checkmarx报告在我的Spring Boot应用程序中将此方法标记为高严重性二阶SQL注入: 根据Checkmarx: ... 应用程序通过在查询中嵌入不受信任的字符串来构造此SQL查询,而无需进行适当的清理。连接的字符串被提交到数据库,并在数据库中进行相应的分析和执行。 setActive('Y')行似乎是问题所在。 我在Spring Data JPA使用中找到的数据清理指南建议使用从

  • 我在玩和 这是我的应用程序上下文文件 以下是我的Java类 HelloWorld1。JAVA 住址JAVA 这里是我尝试运行东西的地方-应用程序。JAVA 我一直在得到这个异常-理想情况下我不应该,因为我已经定义了id为'address1'的@Qualifier注释-所以它不应该抛出异常 警告:上下文初始化过程中遇到的异常-取消刷新尝试:org.springframework.beans.fact

  • 问题内容: 我在属性文件中定义了一个属性: 然后,我有了class, 仅 当属性设置为true时, 才 应 创建一个Property Configuration bean 。 __ 这是我的课: 如果我在里面添加,只是为了进行实验并查看的值是多少,那么 确实 创建了bean , 并且我看到的值是。 如果我删除了,留下的条件作为和属性更改来自于豆,从未创建(既不也不对)。 我应该怎么做才能基于该属性

  • 我将Spring 3.2.4与JavaFX结合使用,并希望实现一种方法,其中操作将在事务中执行。我在控制器中的代码如下所示: 以及我的应用程序上下文: 尝试运行时,我收到以下错误消息: 该方法存在。删除注释,或者将方法从public更改为private,或者从配置中删除bean,程序就会运行,但事务注释根本不起作用。删除代理目标会导致另一个错误。

  • 我的spring应用程序有点小问题。下面是我的代码: (存储库) 下面是我的简单服务类: 更新:配置