Quartz
https://github.com/donhuvy/quartz
https://github.com/quartz-scheduler/quartz
https://www.quartz-scheduler.org/ (die)
https://stackoverflow.com/questions/tagged/quartz-scheduler
Reference document https://github.com/donhuvy/quartz/blob/main/docs/quick-start-guide.adoc
File HelloJob.java
import java.util.Date;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class HelloJob implements Job {
private static Logger _log = LoggerFactory.getLogger(HelloJob.class);
/**
* Empty constructor for job initialization. Quartz requires a public empty constructor so that the scheduler can instantiate the class whenever it needs.
*/
public HelloJob() {
}
public void execute(JobExecutionContext context) throws JobExecutionException {
_log.info("Hello World! - " + new Date());
}
}
File QuartzTest.java
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.Trigger;
import org.quartz.TriggerBuilder;
import org.quartz.impl.StdSchedulerFactory;
import static org.quartz.JobBuilder.newJob;
import static org.quartz.SimpleScheduleBuilder.simpleSchedule;
public class QuartzTest {
public static void main(String[] args) {
try {
// Grab the Scheduler instance from the Factory.
Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();
// And start it off.
scheduler.start();
// define the job and tie it to our HelloJob class
JobDetail job = newJob(HelloJob.class).withIdentity("job1", "group1").build();
// Trigger the job to run now, and then repeat every 40 seconds.
Trigger trigger = TriggerBuilder.newTrigger().withIdentity("trigger1", "group1").startNow().withSchedule(simpleSchedule().withIntervalInSeconds(40).repeatForever()).build();
// Tell quartz to schedule the job using our trigger.
scheduler.scheduleJob(job, trigger);
//scheduler.shutdown();
} catch (SchedulerException se) {
se.printStackTrace();
}
}
}
// Result:
// 10:29:58.884 [DefaultQuartzScheduler_Worker-1] INFO HelloJob -- Hello World! - Tue Feb 25 10:29:58 GMT+07:00 2025
// 10:30:38.854 [DefaultQuartzScheduler_Worker-2] INFO HelloJob -- Hello World! - Tue Feb 25 10:30:38 GMT+07:00 2025
x