项目中的定时任务无法启动,创建任务时是正常的,但是到了执行的时间,任务没有一点反应
东西是照着我之前的一个工程搬过来的,上一个项目没有问题
照着这个帖子处理的http://www.meiriyouke.net/?p=131
spring配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!-- SpringBean切面监控 -->
<beans xmlns="http://www.springframework.org/schema/beans"
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">
<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"/>
</beans>
加载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配置:
<!-- quartz-2.x的配置 -->
<bean name="startQuertz" lazy-init="false" autowire="no"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref bean="BidTaskManagerJobTrigger"/>
<!--<ref bean="demoJobTrigger"/>-->
<ref bean="payTaskTrigger"/>
</list>
</property>
</bean>
<bean id="payTaskTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<property name="jobDetail">
<ref bean="payTaskDetail"/>
</property>
<property name="cronExpression">
<value>0 0 0/2 * * ?</value><!-- 0/5 * * * * ? -->
</property>
</bean>
<!-- 调度的配置结束 -->
<bean id="payTaskDetail"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="concurrent" value="false"/>
<property name="targetObject">
<ref bean="payEndTask"/>
</property>
<property name="targetMethod">
<value>excuteUpdate</value>
</property>
</bean>
<!-- 轮询task类 -->
<bean id="payEndTask" class="com.cq2022.zago.schedule.task.UpdateSchedulePayEndDateTask"></bean>
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注解扫描。
<task:annotation-driven/>
@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
看一下这个