[英]Scheduling a persistent entity
假設我有一個帶有CronExpression字段的數據庫實體:
@Entity
@Table(name = "job")
public class Job {
...
private CronExpression cronExpression;
}
將其放入石英表的最佳方法是什么? 我使用Spring3和Hibernate。 基本上,我可以在DAO中計划它-隨時創建或更新Job-但我還需要在應用程序啟動時計划所有存在的工作。
感謝您的建議!
您需要DAO/Repository
才能從存儲中獲取所有cronExpression。 我在內存中創建DAO
@Repository
public class JobEntityDao {
public List<JobEntity> findAll() {
List<JobEntity> list = new ArrayList<JobEntity>();
JobEntity job1 = new JobEntity("0 0 12 * * ?");
JobEntity job2 = new JobEntity("0 15 10 ? * *");
JobEntity job3 = new JobEntity("0 15 10 * * ?");
list.add(job1);
list.add(job2);
list.add(job3);
return list;
}
}
以及根據您的cronExpression創建石英調度程序的組件。 我稱它為QuartzExecutor
@Service
public class QuartzExecutor {
private JobEntityDao jobEntityDao;
@Autowired
public QuartzExecutor(JobEntityDao jobEntityDao) throws ParseException, SchedulerException {
this.jobEntityDao = jobEntityDao;
init();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private void init() throws ParseException, SchedulerException {
List<JobEntity> jobEntities = jobEntityDao.findAll();
for (JobEntity jobEntity : jobEntities) {
System.out.println(jobEntity.cronExpression);
RunMeTask task = new RunMeTask();
//specify your sceduler task details
JobDetail job = new JobDetail();
job.setName("runMeJob");
job.setJobClass(RunMeJob.class);
Map dataMap = job.getJobDataMap();
dataMap.put("runMeTask", task);
//configure the scheduler time
CronTrigger trigger = new CronTrigger();
trigger.setName("runMeJobTesting");
trigger.setCronExpression(jobEntity.cronExpression);
//schedule it
Scheduler scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
}
}
}
您可以從http://www.mkyong.com/java/quartz-scheduler-example/獲取RunMeJob and RunMeTask
代碼。 我知道課程設計不好,但我擔心的是嘗試解決您的問題。
這是你想要的 ?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.