gpt4 book ai didi

java - JBoss EAP 6.3.0 上的@Singleton 中未调用@PreDestroy 方法

转载 作者:行者123 更新时间:2023-11-30 07:55:41 24 4
gpt4 key购买 nike

在我的 JavaEE 应用程序中,我有一个包含一些 @Scheduled 方法的 @Singleton 类。此外,还有使用 @PostConstruct@PreDestroy 的方法来设置和清理数据库。 (为了简单起见,我只在示例中登录,因为这会重现问题。)应用程序必须在 JBoss EAP 6.3.0.GA 服务器上运行。

虽然 @PostConstruct 方法工作正常,但是当我关闭服务器时,@PreDestroy 没有被调用(按下停止服务器 eclipse 中的按钮或使用来自 jboss-cli 的 shutdown 命令时)。这是一些重现问题的代码:

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import javax.ejb.Singleton;
import javax.ejb.Startup;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

@Singleton
@Startup
public class TimerBean {

private static final Logger log = LoggerFactory.getLogger(TimerBean.class);

@PostConstruct
private void postConstruct() {
log.info("PostConstruct called");
}

@PreDestroy
private void preDestroy() {
log.info("PreDestroy called");
}
}

在服务器启动期间,@PostConstruct 消息出现在日志中。但是当关闭服务器时,没有日志消息出现。

如何让服务器调用@PreDestroy方法?

编辑:由于@PreDestroy 方法不是清理数据库的合适位置,所以这个问题已过时。

最佳答案

这不是您问题的答案,这是您在上一条评论中提出的问题的答案。实际上我想不出一个合适的地方去做。其他人可能会帮助你弄明白。但无论如何 @PostContruct 和 @PreDestory 可能不是事务的一部分,这就是为什么在这些方法中进行数据库操作不好,

但为了您的帮助,我附上了我从一本书(Mastering EJB 3.0)中摘录的内容,

enter image description here

关于java - JBoss EAP 6.3.0 上的@Singleton 中未调用@PreDestroy 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42994279/

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