Java 是春天';s内置的调度程序是持久的。?
我遇到了一个必须使用持久调度程序的情况,因为我有一个web应用程序可能会由于一些问题而崩溃或关闭,如果发生这种情况,可能会丢失它的作业详细信息。我尝试了以下方法:Java 是春天';s内置的调度程序是持久的。?,java,spring,scheduled-tasks,quartz-scheduler,Java,Spring,Scheduled Tasks,Quartz Scheduler,我遇到了一个必须使用持久调度程序的情况,因为我有一个web应用程序可能会由于一些问题而崩溃或关闭,如果发生这种情况,可能会丢失它的作业详细信息。我尝试了以下方法: 使用Quartz调度程序: 我首先使用了RAMJobStore,但由于它不是持久性的,所以没有多大帮助。无法设置JDBCJobStore,因为这将需要对现有代码库进行大量的代码更改。 在这种情况下,, 我有以下疑问: 如果我使用Spring的内置@Schedule注释,我的作业会持久吗。。?我不介意在应用程序启动后安排作业。我只
- 使用Quartz调度程序:
RAMJobStore
,但由于它不是持久性的,所以没有多大帮助。无法设置JDBCJobStore
,因为这将需要对现有代码库进行大量的代码更改。
在这种情况下,,
我有以下疑问:
- 如果我使用Spring的内置
注释,我的作业会持久吗。。?我不介意在应用程序启动后安排作业。我只希望这些工作不会丢失它们的细节和触发因素@Schedule
- 如果不是,是否有可以遵循的任何其他备选方案,请记住,我需要使用调度程序调度多个作业
- 如果是,我如何实现这一点。?我的触发器在每项工作中都是不同的。例如,我可能有一份工作安排在上午9点,另一份工作安排在上午8点30分等等
- 如果不是调度程序,那么我可以有一个机制来处理这个问题吗李>
感谢您的帮助。:)
@Schedule
与实际执行人无关。默认的java执行器不是持久的(可能有一些特定于应用服务器的执行器是持久的),如果您想要持久化,就必须使用它们来执行作业
重复任务
的一个非常简单的示例如下所示:
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();
它将在每天08:00执行名为my daily task
的任务。当调度器第一次启动时,它将在数据库中被调度,除非它已经存在于数据库中
如果您想在未来某个时间使用上下文安排特别任务,可以使用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"));
为什么使用
jdbjobstore
需要更改代码?!嗯。。不是吗。。?我可以为quartz设置一个属性文件,然后用它来完成吗?这需要对调度和quartz部分进行一些配置(并且您可能无法再使用@Scheduled,因为您需要使用quartz作业
界面)。有一些参考资料。