【发布时间】:2018-07-02 17:58:12
【问题描述】:
假设我们有一个数据库表(一个 JPA 实体),创建如下
id|start_date |end_date |object_id
1 |2018-01-01 00:00:00|2018-07-01 20:00:00|1
我想在 end_date 通过 current_date() 时运行一个特定的方法 - 我希望 Spring/Java/DB 启动该方法,而不使用调度程序。下面是一些伪代码:
when (end_date <= current_date()) -> myClass.executeMyMethod(object_id)
这甚至可能吗?我搜索了很多不同的网站,但还没有找到答案。
编辑 - 这是一个我想要这样做的实体:
@Entity
@Getter
@Setter
@AllArgsConstructor
@NoArgsConstructor
@Table(name = "time_based_event", schema = "timing")
public class TimePassingByTrigger {
@Column(name = "id", nullable = false)
protected Long id;
@Column(name = "start_date", nullable = false)
protected LocalDateTime startDate;
@Column(name = "endDate", nullable = false)
protected LocalDateTime endDate;
@Column(name = "object_id", nullable = false)
protected Long objectId;
}
对于服务调用 - 假设我想做类似的事情:
public class TimeFiredEvent {
// this method should be executed for each objectId for
// which end_date has passed
public void thisShouldRunOnlyWhenDatePasses(Long objectId) {
System.out.println("Time has passed for object: " + objectId);
}
}
【问题讨论】:
-
至少为我们提供实体映射和服务调用。
-
@Nikolas 已更新。
-
你想达到什么目的?此外,如果不使用“预定”线程,我看不出这将如何在 Java 级别完成。更重要的是,我们不想使用某种调度方式吗?
-
它不应该基于调度的最重要原因是我需要 thisShouldRunOnlyWhenDatePasses 调用尽可能接近数据库中的 endDate - 即使一秒钟的延迟在这里也很重要。
-
使用ScheduledExecutorService,设置延迟= theDateYouWant.getTime() - new Date().getTime()