JPA:在时间间隔后自动删除数据
JPA: Automatically delete data after timeinterval
我有以下情况:
数据将由发件人在服务器上创建。
如果接收方在(例如)三天内不请求数据,则应删除数据,否则接收方获取数据,获取数据后,数据将被删除。
换句话说:
数据应该只存在一段时间。
我可以创建一个小的 jar 文件来手动删除数据,可能作为 cron-job 启动。但我认为,这是一个非常糟糕的解决方案。
是否可以使用 JPA/Java EE 创建触发器,在特定时间段后调用?据我所知触发器只能称为after/before插入、更新、删除事件。所以这不是解决方案。
注意:我目前正在为我的 RESTeasy 应用程序使用 H2 数据库和 Wildfly。但我将来可能会改变它,所以解决方案应该是自适应的。
此致,
迈克
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 中找到更多信息。
我有以下情况:
数据将由发件人在服务器上创建。 如果接收方在(例如)三天内不请求数据,则应删除数据,否则接收方获取数据,获取数据后,数据将被删除。
换句话说:
数据应该只存在一段时间。
我可以创建一个小的 jar 文件来手动删除数据,可能作为 cron-job 启动。但我认为,这是一个非常糟糕的解决方案。
是否可以使用 JPA/Java EE 创建触发器,在特定时间段后调用?据我所知触发器只能称为after/before插入、更新、删除事件。所以这不是解决方案。
注意:我目前正在为我的 RESTeasy 应用程序使用 H2 数据库和 Wildfly。但我将来可能会改变它,所以解决方案应该是自适应的。
此致,
迈克
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 中找到更多信息。