1、入口類 QuartzTask.java
項目加載: Constructor (構造方法) >>@Autowired(依賴注入) > @PostConstruct (初始化)
可以將需要執行的類配置在數據庫中,查數據庫循環數據
@Component
public class QuartzTask {
private Logger log = LoggerFactory.getLogger(QuartzTask.class);
@Autowired
TaskService taskService;
@PostConstruct
public void task()throws SchedulerException {
log.info("線程開始" + new Date());
// 從數據庫中查出需要批量執行的數據
taskService.sendTask(TestTaskService.class, "testService", "testGroup", "0/5 * * * * ?");
log.info("線程結束" + new Date());
}
}
2、QuartzConfig.java
定時配置類,爲了生成Scheduler(調度器bean)
@Configuration
public class QuartzConfig {
private Logger log = LoggerFactory.getLogger(QuartzConfig.class);
@Bean
public Scheduler scheduled()throws SchedulerException {
log.info("bulid Scheduler start");
// 創建一個Scheduler
// 獲取調度器
SchedulerFactory schedFact = new StdSchedulerFactory();
Scheduler sched = schedFact.getScheduler();
log.info("bulid Scheduler end");
return sched;
}
}
3、TaskService.java
任務調度類,構建jobDetail實例,構建基於cron表達式的觸發器,通過調度器將觸發器和job實例關聯
@Service
public class TaskService {
// 任務調度
@Autowired
private Scheduler scheduler;
public void sendTask(Class jobClass, String name, String group, String cron) throws SchedulerException {
// 開啓調度器
scheduler.start();
// 通過JobBuilder構建JobDetail實例,JobDetail規定只能是實現Job接口的實例
// JobDetail 是具體Job實例
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(name, group).build();
// 基於表達式構建觸發器
CronScheduleBuilder cronScheduleBuilder = CronScheduleBuilder.cronSchedule(cron);
// CronTrigger表達式觸發器 繼承於Trigger
// TriggerBuilder 用於構建觸發器實例
CronTrigger cronTrigger = TriggerBuilder.newTrigger().withIdentity(name, group)
.withSchedule(cronScheduleBuilder).build();
scheduler.scheduleJob(jobDetail, cronTrigger);
}
}
4、TestTaskService.java
具體的業務實現類,實現Job接口
public class TestTaskService implements Job {
private Logger log = Logger.getLogger("TestTaskService.class");
@Override
public void execute(JobExecutionContext jobExecutionContext) throws JobExecutionException {
log.info("test start =============== " + new Date());
}
}
5、涉及jar包
<!--quartz定時器的依賴-->
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
</dependency>
<dependency>
<groupId>org.quartz-scheduler</groupId>
<artifactId>quartz-jobs</artifactId>
</dependency>