簡體   English   中英

安排一個持久實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM