quartz 调度任务应用

来源:互联网 发布:vmware mac os 10.11 编辑:程序博客网 时间:2024/04/30 09:34

maven引入包:

  <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz</artifactId>
            <version>2.2.1</version>
        </dependency>
        <dependency>
            <groupId>org.quartz-scheduler</groupId>
            <artifactId>quartz-jobs</artifactId>
            <version>2.2.1</version>
        </dependency>


1:引入spring调度工厂类

  <bean id="schedulerFactory"  class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
    </bean>

2:编写调度管理类

@Service("quartzManagerJob")
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class QuartzManager  {


    @Resource(name="schedulerFactory")
    private  Scheduler scheduler;


详细如下:



import org.quartz.*;
import org.quartz.impl.triggers.CronTriggerImpl;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;


/**
 *定时任务
 */
@Service("quartzManagerJob")
@Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
public class QuartzManager  {

   public static String pathUrl=QuartzPropertiesUtil.class.getResource("/").getPath()+"task.properties";

    @Resource(name="schedulerFactory")
    private  Scheduler scheduler;


   public boolean addOrUpdate(QuartzVO quartzVO){
       try{
           JobDetail jobDetail=getJobDetail(quartzVO.getJobName(),quartzVO.getJobGroup(),quartzVO.getJobDesc(),quartzVO.getJobClass());
           TriggerKey triggerKey= new TriggerKey(quartzVO.getTriggerName(),quartzVO.getTriggerGroup());
           Trigger trigger=scheduler.getTrigger(triggerKey);
           if(trigger==null){
               Trigger newTrigger= TriggerBuilder.newTrigger()
                       .withIdentity(quartzVO.getTriggerName(), quartzVO.getTriggerGroup())


                       .withSchedule(CronScheduleBuilder.cronSchedule(quartzVO.getCronExpression()))
                       .build();
               scheduler.scheduleJob(jobDetail,newTrigger);
           }else{
               TriggerBuilder oldTriggerBuilder=trigger.getTriggerBuilder();
               trigger=oldTriggerBuilder .withSchedule(CronScheduleBuilder.cronSchedule(quartzVO.getCronExpression()))
                       .build();
               scheduler.rescheduleJob(triggerKey,trigger);


           }


           addOrUpdateProperties(quartzVO.getJobName(),quartzVO.getJobGroup());
       }catch(Exception e){
           e.printStackTrace();
           return false;
       }
       return true;
   }


   public boolean pauseJob(String name,String group){
       try{
           scheduler.pauseJob(new JobKey(name, group));
           return true;
       }catch (Exception e){
           e.printStackTrace();
           return false;
       }
   }


   public boolean resumeJob(String name,String group){
       try{
           scheduler.resumeJob(new JobKey(name, group));
           return true;
       }catch (Exception e){
           e.printStackTrace();
           return false;
       }
   }


   public boolean pauseTrigger(String name,String group){
       try{
           scheduler.pauseTrigger(new TriggerKey(name, group));
           return true;
       }catch (Exception e){
           e.printStackTrace();
           return false;
       }


   }


   public boolean resumeTrigger(String name,String group){
       try{
           scheduler.resumeTrigger(new TriggerKey(name, group));
           return true;
       }catch (Exception e){
           e.printStackTrace();
           return false;
       }
   }


   public boolean delJob(String name,String group){
       try{
           scheduler.deleteJob(new JobKey(name, group));
           QuartzPropertiesUtil.delQuartzs(name+":"+"group");
           return true;
       }catch (Exception e){
           e.printStackTrace();
           return false;
       }
   }


   public List<QuartzJobWorkVO> findQuartz(){
       updateQuartzProperties();
       Map<String,QuartzJobWorkVO> map=null;
       try{
           map=QuartzPropertiesUtil.getQuartzs();
       }catch (Exception e){


       }
       List<QuartzJobWorkVO> quartzJobVOs=new ArrayList<QuartzJobWorkVO>();
       if(map!=null){
           for(QuartzJobWorkVO quartzJobVO:map.values()){
               quartzJobVOs.add(quartzJobVO);
           }
       }
       return quartzJobVOs;
   }


   @PostConstruct
   public void initQuartzBeanProperties()throws Exception{
       Map<String,QuartzJobWorkVO> map=null;
       try{
           map=QuartzPropertiesUtil.getQuartzs();
       }catch (Exception e){


       }
       List<QuartzJobWorkVO> quartzJobVOs=new ArrayList<QuartzJobWorkVO>();
       if(map!=null){
           for(QuartzJobWorkVO quartzJobVO:map.values()){
               QuartzVO quartzVO=new QuartzVO();
               quartzVO.setJobName(quartzJobVO.getName());
               quartzVO.setJobGroup("group");
               quartzVO.setJobDesc(quartzJobVO.getDesc());
               quartzVO.setJobClass(Class.forName(quartzJobVO.getClassName()));
               quartzVO.setTriggerName(quartzJobVO.getName());
               quartzVO.setTriggerGroup("crontrigger");
               quartzVO.setCronExpression(quartzJobVO.getCronExpression());
               addOrUpdate(quartzVO);
               if(quartzJobVO.getState()== Trigger.TriggerState.PAUSED.ordinal()){
                   pauseTrigger(quartzJobVO.getName(),"crontrigger");
               }


           }
       }
   }
    public void updateQuartzProperties(){
        Map<String,QuartzJobWorkVO> map=null;
        try{
            map=QuartzPropertiesUtil.getQuartzs();
            if(map!=null){
                for(QuartzJobWorkVO quartzJobVO:map.values()){
                    JobKey jobkey=new JobKey(quartzJobVO.getName(),"group");


                    JobDetail jobDetail=scheduler.getJobDetail(jobkey);
                    if(jobDetail!=null){
                        addOrUpdateProperties(quartzJobVO.getName(),"group");
                    }else{
                        QuartzPropertiesUtil.delQuartzs(quartzJobVO.getName()+":"+"group");
                    }
                }


                }
        }catch (Exception e){


        }


    }




    private void addOrUpdateProperties(String name,String group){
        QuartzJobWorkVO quartzJobVO=new QuartzJobWorkVO();
        try{
         JobKey jobkey=new JobKey(name,group);
         JobDetail jobDetail=scheduler.getJobDetail(jobkey);
         quartzJobVO.setName(name);
         quartzJobVO.setClassName(jobDetail.getJobClass().getName());
         quartzJobVO.setDesc(jobDetail.getDescription());
         CronTriggerImpl cronTrigger=(CronTriggerImpl)scheduler.getTrigger(new TriggerKey(name,"crontrigger"));
         quartzJobVO.setCronExpression(cronTrigger.getCronExpression());
         quartzJobVO.setState(scheduler.getTriggerState(cronTrigger.getKey()).ordinal());
         quartzJobVO.setStartTime(cronTrigger.getStartTime());
         quartzJobVO.setEndTime(cronTrigger.getEndTime());
         quartzJobVO.setPreviousFireTime(cronTrigger.getPreviousFireTime());
         quartzJobVO.setNextFireTime(cronTrigger.getNextFireTime());


//          List triggerList= scheduler.getTriggers(jobkey);
//          List<QuartzTriggerVO> triggerVOList=new ArrayList<QuartzTriggerVO>();
//          for(int i=0;i<triggerList.size();i++){
//              QuartzTriggerVO  quartzTriggerVO=new QuartzTriggerVO();
//              CronTriggerImpl trigger=(CronTriggerImpl)triggerList.get(i);
//              quartzTriggerVO.setName(trigger.getKey().getName());
//              quartzTriggerVO.setGroup(trigger.getKey().getGroup());
//              quartzTriggerVO.setDesc(trigger.getDescription());
//              quartzTriggerVO.setCronExpression(trigger.getCronExpression());
//              quartzTriggerVO.setEndTime(trigger.getEndTime());
//              quartzTriggerVO.setStartTime(trigger.getStartTime());
//              quartzTriggerVO.setPreviousFireTime(trigger.getPreviousFireTime());
//              quartzTriggerVO.setNextFireTime(trigger.getNextFireTime());
//              quartzTriggerVO.setState(scheduler.getTriggerState(trigger.getKey()).ordinal());
//              triggerVOList.add(quartzTriggerVO);
//          }
        //    quartzJobVO.setTriggers(triggerVOList);
            QuartzPropertiesUtil.writerQuartzs(name+":"+group,quartzJobVO);
        }catch (Exception e){


        }


    }


    private JobDetail getJobDetail(String name,String group,String desc,Class jobClass)throws Exception{
        JobKey jobKey=new JobKey(name,group);
        JobDetail jobDetail=scheduler.getJobDetail(jobKey);
        if(jobDetail!=null){
            JobDetail jobNew= jobDetail.getJobBuilder().newJob(jobClass)
                     .withDescription(desc)
                    .build();
            return jobNew;
        }
        JobDetail jobNew=JobBuilder.newJob(jobClass)
                .withIdentity(name,group)
                .withDescription(desc)
                .build();
       return  jobNew;
    }
}



3:调度工具类


import com.fasterxml.jackson.databind.ObjectMapper;


import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.*;


/**
 * Created by Administrator on 13-12-23.
 */
public class QuartzPropertiesUtil {


    public static String pathUrl=QuartzPropertiesUtil.class.getResource("/").getPath()+"task.properties";
    public static Map<String ,QuartzJobWorkVO> getQuartzs() throws Exception {
        Map<String ,QuartzJobWorkVO> map=new HashMap<String ,QuartzJobWorkVO>();
            Properties properties =new Properties();
            InputStream in=new FileInputStream(pathUrl);
            properties.load(in);
            in.close();
            Enumeration enu=properties.keys();
            while(enu.hasMoreElements()){
                String key=enu.nextElement().toString();
                String value=properties.getProperty(key);
                if(value!=null&&!"".equals(value)){
                            map.put(key,quartzToObject(value));
                }


            }
           return  map;
    }






    public static boolean writerQuartzs(String key,QuartzJobWorkVO quartzJobVO) throws  Exception{
        InputStream in=null;
        OutputStream os=null;
        try{
        Properties properties =new Properties();
        in=new FileInputStream(pathUrl);
        properties.load(in);
        in.close();
        in=null;
        String josn=properties.getProperty(key);
         os=new FileOutputStream(pathUrl);
        properties.put(key,quartztoJson(quartzJobVO));
        if(josn!=null&&!"".equals(josn)){
            properties.store(os,"更新:"+key);
        }else{
            properties.store(os,"添加:"+key);
        }
         os.close();
         os=null;
       }catch (Exception e){
          e.printStackTrace();
       }finally {
            if(in!=null) in.close();
            if(os!=null) os.close();
       }
        return true;
    }

    public static boolean delQuartzs(String key) throws  Exception{
        InputStream in=null;
        OutputStream os=null;
        try{
            Properties properties =new Properties();
            in=new FileInputStream(pathUrl);
            properties.load(in);
            in.close();
            in=null;
            String josn=properties.getProperty(key);
            os=new FileOutputStream(pathUrl);


            if(josn!=null&&!"".equals(josn)){
                properties.remove(key);
                properties.store(os,"删除:"+key);
            }
            os.close();
            os=null;
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            if(in!=null) in.close();
            if(os!=null) os.close();
        }
        return true;
    }




    public static  QuartzJobWorkVO quartzToObject(String json)throws Exception{
        ObjectMapper mapper = new ObjectMapper();
        QuartzJobWorkVO quartzJobVO= mapper.readValue(json,QuartzJobWorkVO.class);
        return quartzJobVO;
    }


    public static  String  quartztoJson(QuartzJobWorkVO quartzJobVO) throws Exception{
        ObjectMapper mapper = new ObjectMapper();
        return mapper.writeValueAsString(quartzJobVO);
    }

}


4:Test类

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = "classpath:applicationContext_task.xml")
public class QuartzManagerTest {

    @Resource(name="quartzManager")
    private QuartzManager quartzManager;
    @Test
    public void queartTest()throws Exception{
        quartzManager.addOrUpdateSchedule("2","2","0/5 * * * * ?", One.class);
        Thread.sleep(2000);
        quartzManager.addOrUpdateSchedule("1", "3", "0/5 * * * * ?", Two.class);
        Thread.sleep(2000);
        quartzManager.addOrUpdateSchedule("1", "3", "0/2 * * * * ?", Two.class);
        quartzManager.findTrigger("1","3");
        Thread.sleep(1000000);
    }


    @Test
    public void queartTest2(){
        quartzManager.addOrUpdateSchedule("2", "2", "0/5 * * * * ?", Two.class);
    }
}


0 0
原创粉丝点击