在 Cron Job 中使用 DAO 类 进行数据调用
Using DAO classes for data call in Cron Job
嗨,这是我的 Cron 调度程序
public class CronListener implements ServletContextListener {
Scheduler scheduler = null;
@Override
public void contextInitialized(ServletContextEvent servletContext) {
System.out.println("Context Initialized");
try {
// Setup the Job class and the Job group
JobDetail job = newJob(CronJob.class).withIdentity("CronQuartzJob",
"Webapp").build();
// This is what I've tried as well
/*
* JobDataMap jdm = new JobDataMap(); jdm.put("targetDAO",
* targetDAO);
*/
// Create a Trigger that fires every X minutes.
Trigger trigger = newTrigger()
.withIdentity("CronQuartzJob", "Sauver")
.withSchedule(
CronScheduleBuilder.cronSchedule
("0 0/1 * 1/1 * ? *")).build();
// Setup the Job and Trigger with Scheduler & schedule jobs
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContext) {
System.out.println("Context Destroyed");
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
这是 Cron 作业本身
public class CronJob implements org.quartz.Job {
static Logger log = Logger.getLogger(CronJob.class.getName());
@Autowired
TargetDAO targetDAO;
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
try {
targetDAO.getAllTargets();
} catch (Exception e1) {
e1.printStackTrace();
}
log.info("webapp-rest cron job started");
try {
Utils.getProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
我想要做的是让 DAO class 每隔几个小时将一些数据调用到其中并通过它调用一个函数。
但是当我通过 DAO 调用数据时,它总是 returns 空。
我发现我必须以某种方式映射 DAO,我在基于 xml 的 cron 作业中看到过,但我无法在这个作业中映射它。
这不完全是一个答案,而是一个解决方法,
我所做的是创建一个新的 class
@EnableScheduling
@Component
public class SpringCronJob {
private static Logger log = Logger.getLogger(SpringCronJob.class.getName());
@Autowired
TargetDAO targetDAO;
@Scheduled(fixedRate = 15000)
public void getPostedTargets() {
try {
log.info(targetDAO.getAllTargets());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
它不需要任何其他东西,不需要调度器,你只需要将它添加到你的组件扫描中
这就是引导我走向它的原因
http://howtodoinjava.com/spring/spring-core/4-ways-to-schedule-tasks-in-spring-3-scheduled-example/
嗨,这是我的 Cron 调度程序
public class CronListener implements ServletContextListener {
Scheduler scheduler = null;
@Override
public void contextInitialized(ServletContextEvent servletContext) {
System.out.println("Context Initialized");
try {
// Setup the Job class and the Job group
JobDetail job = newJob(CronJob.class).withIdentity("CronQuartzJob",
"Webapp").build();
// This is what I've tried as well
/*
* JobDataMap jdm = new JobDataMap(); jdm.put("targetDAO",
* targetDAO);
*/
// Create a Trigger that fires every X minutes.
Trigger trigger = newTrigger()
.withIdentity("CronQuartzJob", "Sauver")
.withSchedule(
CronScheduleBuilder.cronSchedule
("0 0/1 * 1/1 * ? *")).build();
// Setup the Job and Trigger with Scheduler & schedule jobs
scheduler = new StdSchedulerFactory().getScheduler();
scheduler.start();
scheduler.scheduleJob(job, trigger);
} catch (SchedulerException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent servletContext) {
System.out.println("Context Destroyed");
try {
scheduler.shutdown();
} catch (SchedulerException e) {
e.printStackTrace();
}
}
}
这是 Cron 作业本身
public class CronJob implements org.quartz.Job {
static Logger log = Logger.getLogger(CronJob.class.getName());
@Autowired
TargetDAO targetDAO;
@Override
public void execute(JobExecutionContext context)
throws JobExecutionException {
try {
targetDAO.getAllTargets();
} catch (Exception e1) {
e1.printStackTrace();
}
log.info("webapp-rest cron job started");
try {
Utils.getProcessed();
} catch (Exception e) {
e.printStackTrace();
}
}
我想要做的是让 DAO class 每隔几个小时将一些数据调用到其中并通过它调用一个函数。 但是当我通过 DAO 调用数据时,它总是 returns 空。
我发现我必须以某种方式映射 DAO,我在基于 xml 的 cron 作业中看到过,但我无法在这个作业中映射它。
这不完全是一个答案,而是一个解决方法, 我所做的是创建一个新的 class
@EnableScheduling
@Component
public class SpringCronJob {
private static Logger log = Logger.getLogger(SpringCronJob.class.getName());
@Autowired
TargetDAO targetDAO;
@Scheduled(fixedRate = 15000)
public void getPostedTargets() {
try {
log.info(targetDAO.getAllTargets());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
它不需要任何其他东西,不需要调度器,你只需要将它添加到你的组件扫描中
这就是引导我走向它的原因 http://howtodoinjava.com/spring/spring-core/4-ways-to-schedule-tasks-in-spring-3-scheduled-example/