• quartz介绍


    Quartz 是一个开源的作业调度框架,它完全由 Java 写成,并设计用于 J2SE 和 J2EE 应用中。它提供了巨大的灵活性而不牺牲简单性。你能够用它来为执行一个作业而创建简单的或复杂的调度。本系统结合通过 Spring 来集成 Quartz 。

    Quartz  下载地址 :http://grepcode.com/snapshot/repo1.maven.org/maven2/org.quartz-scheduler/quartz/1.7.3

    quartz需要明确几个概念: 

    1. scheduler:任务(job)调度器 
    2. trigger:任务(job)调度器 
    3. job:任务 


    比较重要的几个关系: 

    1. scheduler和trigger都是为job服务的,scheduler更像一个容器,存储job及其相关的信息的; 
    2. trigger,顾名思义就是来告诉scheduler,什么时候调度已经在容器(scheduler)中的job; 
     1 、JobDetail : JobDetail 是一个具体的类。
     2、Trigger :触发器,它用于定义 Job 何时执行。最常用的是 SimpleTrigger 和 CronTrigger 。一般来说,如果你需要在一个固定的时间和重复次数或者一个固定的间隔时间,那么 SimpleTrigger 比较合适;如果你有许多复杂的作业调度,那么 CronTrigger 比较合适。CronTrigger 和 Unix 的 cron 机制基本一样,我们需要的只是一个 cron 表达式。比如“ 0 0 12 * * ? ”会在每天中午 12 点触发 执行;“ 0 15 10 ? * 6L ”会在每个月的最后一个星期五的早上 10:15 触发 Job 执行。
     3、 Scheduler 和 SchedulerFactory : Scheduler 负责管理 Trigger 、调度 Job , SchedulerFactory 则是 Scheduler 工厂,负责生成Scheduler 。



    剩下的基本上就清楚了 

    1. 创建一个scheduler 
    2. 创建job,绑定trigger --- > 这个有个综合的概念jobdetail 
    3. 添加、移除jobDetail

     以下两种方式注册和使用

    1.自己管理job 

    /**
     * 注册job
     *
     */
    public class JobSchedule {
        private static final Logger log = LoggerFactory.getLogger(JobSchedule.class);
        
        private static final SchedulerFactory sf = new StdSchedulerFactory();
        private static final String JOB_GROUP_NAME = "job_nsanban";
        private static final String TRIGGER_GROUP_NAME = "trigger_nsanBan";
        
        
        public static void addJob(String jobName, Job job, String time) throws SchedulerException, ParseException {
            log.info("注册定时任务.任务名称:"+jobName+";任务执行类:"+job.getClass()+";执行时间:"+time);
            
            Scheduler sched = sf.getScheduler();
            JobDetail jobDetail = new JobDetail(jobName, JOB_GROUP_NAME, job.getClass());// 任务名,任务组,任务执行类
            // 触发器
            CronTrigger trigger = new CronTrigger(jobName, TRIGGER_GROUP_NAME);// 触发器名,触发器组
            trigger.setCronExpression(time);// 触发器时间设定
            sched.scheduleJob(jobDetail, trigger);
            // 启动
            if (!sched.isShutdown())sched.start();
            
        }
    }

     2.spring管理job

        <!-- Timer schedule -->
    
        <!--要调度的对象-->
        <bean id="jobBean" class="net.xsbiz.common.MakeHtml" />
        <bean id="jobDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
            <property name="targetObject" ref="jobBean" />
            <property name="targetMethod" value="execute" />
            <!--将并发设置为false-->
            <property name="concurrent" value="false" />
        </bean>
    
        <bean id="trigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
             <property name="jobDetail" ref="jobDetail" />
                     <!--表达式,我的是每 30 执行一次-->
                   &nbsp;<property name="cronExpression" value="0/30 * * * * ?" />
        </bean>
    
        <!--  总管理类如果将lazy-init='false'那么容器启动就会执行调度程序   -->
        <bean id="startQuertz" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" lazy-init="false" >
             <property name="triggers">
                 <list>
                     <!--作业调度器,list下可加入其他的调度器-->
                    <ref bean="trigger" />
                 </list>
            </property>
        </bean>
    //调用的类
    public class MakeHtml {
        //调用的方法
        public void execute(){
            //需要做的事情
        }
    
    
             public static void main(String[] args) {
            
             
                System.out.println("----begin---"); 
    
                ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml"); 
    
                // 如果配置文件中将startQuertz bean的lazy-init设置为false 则不用实例化 
    
                context.getBean("startQuertz"); 
    
                System.out.print("----end---");
              
    
        }
    
    }
  • 相关阅读:
    WINDOWS 修改ROUTE命令
    SQL Server 索引 之 书签查找 <第十一篇>
    SQL Server索引的维护
    SQL Server索引语法 <第四篇>
    SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>
    SQL Server
    开发反模式
    开发反模式(GUID)
    开发反模式
    SQLServer 窗口函数
  • 原文地址:https://www.cnblogs.com/hwaggLee/p/4827960.html
Copyright © 2020-2023  润新知