java - 如何用EJB实现永久后台进程?

标签 java jakarta-ee ejb

我有一个关于 EJB 中通用设计模式的问题。我有 Java EE 应用程序(EJB 和 Web),我需要一种后台进程,它通过 JPA 永久扫描和处理特定数据。

我想到的一个解决方案是实现 @Singleton EJB。在用 @PostConstruct 注释的方法中,我可以开始我的过程。

@Singleton
@Startup
public class MyUpdateService {
    @PostConstruct
    void init() {
        while(true) {
            // scann for new data...
            // do the job.....
        }
    }
}

但是这是推荐的模式吗?或者有更好的方法在 EJB 容器中运行这样的类吗?

在 EJB 中还有其他模式,例如 @TimerService 和新的 Java EE7 批处理。但这两个概念 - 我认为 - 都用于有限过程?

最佳答案

在当前项目中使用 EJB TimerService 来执行定期数据修剪或后端数据同步等任务。它不仅允许单次执行,还允许间隔计时器和带有基于日历的时间表的计时器。

像这样:

@Startup
@Singleton
public class SyncTimer {
    private static final long HOUR = 60 * 60 * 1000L;

    @Resource
    private TimerService timerService;
    private Timer timer;

    @PostConstruct
    public void init() {
        TimerConfig config = new TimerConfig();
        config.setPersistent(false);
        timer = timerService.createIntervalTimer(HOUR, HOUR, config);
    }

    @Timeout
    private synchronized void onTimer() {
        // every hour action
    }
}

关于java - 如何用EJB实现永久后台进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55640112/

相关文章:

java - 消费本地EJB,同一个Container,不同耳

java - 通过@Resource注入(inject)TimerService时为"Injection data not found in JNDI context"

java - 作为 TCP 服务器的 EJB 单例

jakarta-ee - 无法在 Java EE 7 堆栈上获取 Spring Data JPA + CDI

java - 构造函数中的通用推理

java - 与子类的动态绑定(bind) "no suitable method found"

java - JMS-分布式事务

java - Netbeans EJB 无法添加依赖项

java - 使用 iText 生成 PDF 文件时出现问题

java - Android apache poi 编辑数字单元格