<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"><beans>
    <bean name="quartzScheduler" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
        <property name="dataSource" ref ="dataSource" />       
        <property name="applicationContextSchedulerContextKey" value="applicationContextKey"/>
        <property name="configLocation" value="classpath:quartz.properties"/>
    </bean>
    <bean id="simpleService" class="com.sundoctor.example.service.SimpleService"></bean>
    <bean id="jobDetail" class="org.springframework.scheduling.quartz.JobDetailBean">
        <property name="jobClass">
            <value>
                com.sundoctor.example.service.MyQuartzJobBean
            </value>
        </property>
        <property name="jobDataAsMap">
            <map>
                <entry key="simpleService">
                    <ref bean="simpleService"/>
                </entry>
            </map>
        </property>
    </bean>
    <bean id="myJob" class="com.sundoctor.example.service.MyJob"></bean>
    <bean id="job" class="org.springframework.scheduling.quartz.JobDetailBean">
     <property name="jobClass">
     <value>com.sundoctor.example.service.TestJob</value>
     </property>
     <property name="jobDataAsMap">
     <map>
     <entry key="myJob">
     <ref bean="myJob"/>
     </entry>
     </map>
     </property>
    </bean>
    
 <bean name="schedulerService" class="com.sundoctor.quartz.service.SchedulerServiceImpl">
<property name="scheduler" ref="quartzScheduler"></property>
<property name="jobDetailMap">
<map>
<entry key="myJob"><ref bean="job"/></entry>
<entry key="jobDetail"><ref bean="jobDetail"/></entry>
</map>
</property>
<property name="quartzDao" ref="quartzDao"></property>
</bean>

</beans>
public void schedule(String name, CronExpression cronExpression,String group) {
if (name == null || name.trim().equals("")) {
name = UUID.randomUUID().toString();
}else{
//在名称后添加UUID,保证名称的唯一性
name +="&"+UUID.randomUUID().toString();
}
try {
JobDetail job =(JobDetail)jobDetailMap.get("jobDetail");
scheduler.addJob(job, true);
System.out.println("jobDetail:"+job.getName());
CronTrigger cronTrigger = new CronTrigger(name, group, job.getName(),
Scheduler.DEFAULT_GROUP);
cronTrigger.setCronExpression(cronExpression);
scheduler.scheduleJob(cronTrigger);
scheduler.rescheduleJob(cronTrigger.getName(), cronTrigger.getGroup(), cronTrigger);

} catch (SchedulerException e) {
throw new RuntimeException(e);
}
}下发任务后,每次都会执行任务都会执行两次

解决方案 »

  1.   

    你的quartz应该没问题
    如果你是用Tomcat,问题应该是出现在Tomcat的部署上面
    你的工程在tomcat配置有两个Host,就相当于你启动了两个定时任务
    看下这篇文章,希望对你有用
    http://blog.163.com/qyr_ecust/blog/static/9793217620095222134687/
      

  2.   

     <Host name="localhost"  appBase=""
                unpackWARs="true" autoDeploy="true"
                xmlValidation="false" xmlNamespaceAware="false">
    没有啊,我把appBase改了webapps下边的项目就没办法加载了
      

  3.   

    你看你src下 有没有quartz_job.xml和quartz.properties这两个文件,你是在程序中定义的Scheduler,有可能在这个quartz_job.xml中重复定义了