spring+quartz 定时任务无法执行,请大神帮忙看看
项目中的定时任务无法启动,创建任务时是正常的,但是到了执行的时间,任务没有一点反应
东西是照着我之前的一个工程搬过来的,上一个项目没有问题
照着这个帖子处理的http://www.meiriyouke.net/?p=131
spring配置文件
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
加载scheduler
private Scheduler scheduler;
private Scheduler getScheduler(){
if(scheduler == null){
scheduler = (Scheduler)SpringBeanLoader.getSpringBean("schedulerFactoryBean");
}
return scheduler;
}
创建任务
private void jobCreate(Dto dto, CronTrigger cronTrigger) throws Exception{
Class extends Job> jobClass = (Class extends Job>) Class.forName(dto.getAsString("jobclass"));
//不存在,创建一个
if (cronTrigger == null) {
ScheduleUtils.createScheduleJob(getScheduler(), dto, jobClass);
} else {
//已存在
return;
}
}
public static void createScheduleJob(Scheduler scheduler, Dto dto,
Class extends Job> jobClass) throws SchedulerException {
//构建job信息
JobDetail jobDetail = JobBuilder.newJob(jobClass).withIdentity(
dto.getAsString("schedulerid"), dto.getAsString("companyid")).build();
//放入参数,运行时的方法可以获取
jobDetail.getJobDataMap().put(JOB_PARAM_KEY, dto);
//表达式调度构建器
CronScheduleBuilder scheduleBuilder = CronScheduleBuilder.cronSchedule(dto.getAsString("cronexpression"));
//按新的cronExpression表达式构建一个新的trigger
CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity(dto.getAsString("schedulerid"), dto.getAsString("companyid"))
.withSchedule(scheduleBuilder).build();
scheduler.scheduleJob(jobDetail, trigger);
}
------解决思路----------------------
看看这个呢。/
------解决思路----------------------
我现在做的一个轮询,你参考:
spring配置:
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
0 0 0/2 * * ?
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
excuteUpdate
java代码:
public class UpdateSchedulePayEndDateTask implements Serializable{
private static final long serialVersionUID = 1L;
private static final Logger logger = LoggerFactory.getLogger(UpdateSchedulePayEndDateTask.class);
@Resource
private MeetingScheduleService meetingScheduleService;
public void excuteUpdate(){
logger.info("启动轮询:查询出所有付款截止时间小于当前时间的会议集合,并修改成取消");
meetingScheduleService.releaseSchdlByPayDateEnd();//这里是业务操作
}
}
很简单~
------解决思路----------------------
直接 task注解扫描。
@Scheduled(cron = "*/5 * * * * ?")
//@Scheduled(fixedDelay = 5000)
public void demoServiceMethod() {
System.out.println("Method executed at every 5 seconds. Current time is :: " + (new java.text.SimpleDateFormat("yyyy-MM-dd HH:mm:ss")).format(new Date()));
}
------解决思路----------------------
http://yangpanwww.iteye.com/blog/797563
看一下这个