在 Spring 一段时间后执行方法的最佳方式
Best way to execute a method after some time in Spring
用户发送了产品请求。如果 9 小时内没有卖家回复,系统会将此请求发送给其他具有类似产品的卖家。
调度程序不适合我,因为用户发送的每个请求应该恰好 9 小时。
那么正确的方法是什么?
P.S 请求、用户等存储在 Postgres 数据库中。
我知道这是一个沉重的框架,但我对任何复杂调度的解决方案都是 Quartz http://www.quartz-scheduler.org/documentation/quartz-2.3.0/quick-start.html
作业数据可持久化到db,内置心跳、锁定、集群、失火处理、取消...成熟的调度框架。
根据他们的示例,一个简单的触发器就足以满足您的用例:
// get a "nice round" time a few seconds in the future...
Date startTime = DateBuilder.nextGivenSecondDate(null, 15);
// job1 will only fire once at date/time "ts"
JobDetail job = newJob(SimpleJob.class).withIdentity("job1", "group1").build();
SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1").startAt(startTime).build();
// schedule it to run!
Date ft = sched.scheduleJob(job, trigger);
困难的部分是在您的项目中进行 quartz 的初始设置,如果您希望在未来某个时间(有或没有复发)有其他场景可靠地触发某些东西,那么这是值得的。
用户发送了产品请求。如果 9 小时内没有卖家回复,系统会将此请求发送给其他具有类似产品的卖家。
调度程序不适合我,因为用户发送的每个请求应该恰好 9 小时。
那么正确的方法是什么?
P.S 请求、用户等存储在 Postgres 数据库中。
我知道这是一个沉重的框架,但我对任何复杂调度的解决方案都是 Quartz http://www.quartz-scheduler.org/documentation/quartz-2.3.0/quick-start.html
作业数据可持久化到db,内置心跳、锁定、集群、失火处理、取消...成熟的调度框架。
根据他们的示例,一个简单的触发器就足以满足您的用例:
// get a "nice round" time a few seconds in the future...
Date startTime = DateBuilder.nextGivenSecondDate(null, 15);
// job1 will only fire once at date/time "ts"
JobDetail job = newJob(SimpleJob.class).withIdentity("job1", "group1").build();
SimpleTrigger trigger = (SimpleTrigger) newTrigger().withIdentity("trigger1", "group1").startAt(startTime).build();
// schedule it to run!
Date ft = sched.scheduleJob(job, trigger);
困难的部分是在您的项目中进行 quartz 的初始设置,如果您希望在未来某个时间(有或没有复发)有其他场景可靠地触发某些东西,那么这是值得的。