JPA:在timeinterval之后自动删除数据

时间:2015-02-25 09:16:29

标签: jpa triggers cron h2 resteasy

我有以下情况:

数据将由服务器上的发件人创建。 如果接收方不会在(例如)三天内请求数据,则应删除数据,否则接收方获取数据,获取数据后,数据将被删除。

换句话说:

数据应该只在有限的时间内存在。

我可以创建一个小的jar文件,它会手动删除数据,可能是作为一个cron-job启动的。但我认为,这是一个非常糟糕的解决方案。

是否可以使用JPA / Java EE创建一个触发器,该触发器将在特定时间段后调用?据我所知,触发器只能在插入,更新,删除事件之后/之前调用。所以这不是一个解决方案。

注意:我目前正在使用H2-Database和Wildfly作为我的RESTeasy应用程序。但是我将来可能会改变它,所以解决方案应该是适应性的。

致以最诚挚的问候,

MAIK

1 个答案:

答案 0 :(得分:2)

Java EE带来了您需要的一切。您可以@Schedule定期执行清理工作:

@Singleton
public class Cleanup {

    @Schedule(minute = "*/5")
    public void clean() {
        // will be called every 5 minutes
    }

}

或者您以编程方式创建Timer,这将在一段时间后执行:

@Singleton
public class Cleanup {

    @Resource
    TimerService timerService;

    public void deleteLater(long id) {
        String timerInfo = MyEntity.class.getName() + ':' + id;
        long timeout = 1000 * 60 * 5; // 5 minutes
        timerService.createTimer(timeout, timerInfo);
    }

    @Timeout
    public void handleTimeout(Timer timer) {
        Serializable timerInfo = timer.getInfo(); // the information you passed to the timer
    }

}

更多信息可在Timer Service Tutorial

中找到