use*_*071 6 java spring scheduled-tasks quartz-scheduler
我遇到了一个必须使用持久性调度程序的情况,因为我有一个Web应用程序可能因某些问题而崩溃或关闭,并且如果发生这种情况可能会丢失它的作业详细信息.我尝试过以下方法:
我RAMJobStore首先使用,但由于它不是持久性的,所以没有多大帮助.无法设置JDBCJobStore因为,这将需要对我现有的代码库进行大量代码更改.鉴于这种情况,我有以下问题:
@Schedule注释,我的工作会持久 ......?我不介意在应用程序启动后是否安排了作业.我想要的就是不失去细节和触发器的工作.有一点,我发现Quartz的文档不是很具描述性.我的意思是它适用于顶级配置,但在应用程序上配置它是一件痛苦的事.这只是一个侧面说明.与这个问题无关.
感谢帮助.:)
小智 7
不,Spring的@ Schedule-annotation通常只会指示Spring应该在什么时候安排某个任务在当前VM中运行.据我所知,没有执行的背景.时间表是静态的.
我有类似的要求并创建了db-scheduler(https://github.com/kagkarlsson/db-scheduler),这是一个简单,持久且集群友好的调度程序.它将下一个执行时间存储在数据库中,并在到达时触发执行.
RecurringTask没有上下文的一个非常简单的示例可能如下所示:
final RecurringTask myDailyTask = ComposableTask.recurringTask("my-daily-task", Schedules.daily(LocalTime.of(8, 0)),
() -> System.out.println("Executed!"));
final Scheduler scheduler = Scheduler
.create(dataSource)
.startTasks(myDailyTask)
.threads(5)
.build();
scheduler.start();
Run Code Online (Sandbox Code Playgroud)
它将执行my-daily-task每天08:00 命名的任务.它将在首次启动调度程序时在数据库中进行调度,除非它已存在于数据库中.
如果您希望将来某个时间使用上下文安排临时任务,可以使用OneTimeTask:
final OneTimeTask oneTimeTask = ComposableTask.onetimeTask("my-onetime-task",
(taskInstance, context) -> System.out.println("One-time task with identifier "+taskInstance.getId()+" executed!"));
scheduler.scheduleForExecution(LocalDateTime.now().plusDays(1), oneTimeTask.instance("1001"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4402 次 |
| 最近记录: |