quartz原理及常用对象

    <div class="article_title">   
         <span class="ico ico_type_Repost"></span>


    <h1>
        <span class="link_title"><a href="/ye_sheng/article/details/48396127">
        深入解读Quartz的原理(job-jobDetail-Trigger-scheduler)            
        </a></span>
    </h1>
</div>

   

        <div class="article_manage clearfix">
        <div class="article_l">
            <span class="link_categories">
            标签:
              <a href="http://www.csdn.net/tag/quartz" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">quartz</a><a href="http://www.csdn.net/tag/%e5%8e%9f%e7%90%86" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">原理</a><a href="http://www.csdn.net/tag/%e5%ae%9a%e6%97%b6%e4%bb%bb%e5%8a%a1" target="_blank" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_tag']);">定时任务</a>
            </span>
        </div>
        <div class="article_r">
            <span class="link_postdate">2015-09-12 18:15</span>
            <span class="link_view" title="阅读次数">1326人阅读</span>
            <span class="link_comments" title="评论次数"> <a href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论</a>(0)</span>
            <span class="link_collect tracking-ad" data-mod="popu_171"> <a href="javascript:void(0);" onclick="javascript:collectArticle('%e6%b7%b1%e5%85%a5%e8%a7%a3%e8%af%bbQuartz%e7%9a%84%e5%8e%9f%e7%90%86%ef%bc%88job-jobDetail-Trigger-scheduler%ef%bc%89','48396127');return false;" title="收藏" target="_blank">收藏</a></span>
             <span class="link_report"> <a href="#report" onclick="javascript:report(48396127,2);return false;" title="举报">举报</a></span>

        </div>
    </div>
    <div class="embody" style="display:none" id="embody">
        <span class="embody_t">本文章已收录于:</span>
        <div class="embody_c" id="lib" value="{"err":0,"msg":"ok","data":[]}"></div>
    </div>
    <style type="text/css">        
            .embody{
                padding:10px 10px 10px;
                margin:0 -20px;
                border-bottom:solid 1px #ededed;                
            }
            .embody_b{
                margin:0 ;
                padding:10px 0;
            }
            .embody .embody_t,.embody .embody_c{
                display: inline-block;
                margin-right:10px;
            }
            .embody_t{
                font-size: 12px;
                color:#999;
            }
            .embody_c{
                font-size: 12px;
            }
            .embody_c img,.embody_c em{
                display: inline-block;
                vertical-align: middle;               
            }
             .embody_c img{               
                width:30px;
                height:30px;
            }
            .embody_c em{
                margin: 0 20px 0 10px;
                color:#333;
                font-style: normal;
            }
    </style>
    <script type="text/javascript">
        $(function () {
            try
            {
                var lib = eval("("+$("#lib").attr("value")+")");
                var html = "";
                if (lib.err == 0) {
                    $.each(lib.data, function (i) {
                        var obj = lib.data[i];
                        //html += '<img src="' + obj.logo + '"/>' + obj.name + "  ";
                        html += ' <a href="' + obj.url + '" target="_blank">';
                        html += ' <img src="' + obj.logo + '">';
                        html += ' <em><b>' + obj.name + '</b></em>';
                        html += ' </a>';
                    });
                    if (html != "") {
                        setTimeout(function () {
                            $("#lib").html(html);                      
                            $("#embody").show();
                        }, 100);
                    }
                }      
            } catch (err)
            { }
            
        });
    </script>
      <div class="category clearfix">
        <div class="category_l">
           <img src="http://static.blog.csdn.net/images/category_icon.jpg">
            <span>分类:</span>
        </div>
        <div class="category_r">
                    <label onclick="GetCategoryArticles('5778383','ye_sheng','top','48396127');">
                        <span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">定时任务<em>(8)</em></span>
                      <img class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display:inline;">
                      <img class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display:none;">
                        <div class="subItem">
                            <div class="subItem_t"><a href="http://blog.csdn.net/ye_sheng/article/category/5778383" target="_blank">作者同类文章</a><i class="J_close">X</i></div>
                            <ul class="subItem_l" id="top_5778383">                            
                            </ul>
                        </div>
                    </label>                    
        </div>
    </div>

  

  
  
     


<div id="article_content" class="article_content tracking-ad" data-mod="popu_307" data-dsm="post">

<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px" align="center">
<span style="padding:0px; margin:0px"><span style="font-size:14px; color:#ff0000; padding:0px; margin:0px">深入解读Quartz的原理</span></span></div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
Quartz是一个大名鼎鼎的Java版开源定时调度器,功能强悍,使用方便。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<span style="padding:0px; margin:0px">一、核心概念</span></div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
Quartz的原理不是很复杂,只要搞明白几个概念,然后知道如何去启动和关闭一个调度程序即可。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
1、Job</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
表示一个工作,要执行的具体内容。此接口中只有一个方法</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
void execute(JobExecutionContext context)</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
2、JobDetail</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
JobDetail表示一个具体的可执行的调度程序,Job是这个可执行程调度程序所要执行的内容,另外JobDetail还包含了这个任务调度的方案和策略。<br style="padding:0px; margin:0px">
</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
3、Trigger代表一个调度参数的配置,什么时候去调。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
4、Scheduler代表一个调度容器,一个调度容器中可以注册多个JobDetail和Trigger。当Trigger与JobDetail组合,就可以被Scheduler容器调度了。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<span style="padding:0px; margin:0px">二、一个最简单入门实例</span></div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<div style="padding:0px; margin:0px">
<div style="padding:4px; margin:0px; border:1px solid rgb(204,204,204); font-size:10pt; width:705.59375px; color:rgb(0,0,0); word-break:break-all; line-height:16px; font-family:verdana,宋体; background-color:rgb(238,238,238)">
<span style="color:#0000ff; padding:0px; margin:0px">import</span> org.quartz.*; <br style="padding:0px; margin:0px">
<span style="color:#0000ff; padding:0px; margin:0px">import</span> org.quartz.impl.StdSchedulerFactory; <br style="padding:0px; margin:0px">
<br style="padding:0px; margin:0px">
<span style="color:#0000ff; padding:0px; margin:0px">import</span> java.util.Date; <br style="padding:0px; margin:0px">
<br style="padding:0px; margin:0px">
<span style="color:#008000; padding:0px; margin:0px">/** <br style="padding:0px; margin:0px">
* quartz定时器测试 <br style="padding:0px; margin:0px">
* <br style="padding:0px; margin:0px">
* @author leizhimin 2009-7-23 8:49:01 <br style="padding:0px; margin:0px">
*/</span> <br style="padding:0px; margin:0px">
<span style="color:#0000ff; padding:0px; margin:0px">public</span> <span style="color:#0000ff; padding:0px; margin:0px">class</span> MyJob <span style="color:#0000ff; padding:0px; margin:0px">implements</span> Job { <br style="padding:0px; margin:0px">
        <span style="color:#0000ff; padding:0px; margin:0px">public</span> <span style="color:#0000ff; padding:0px; margin:0px">void</span> execute(JobExecutionContext jobExecutionContext) <span style="color:#0000ff; padding:0px; margin:0px">throws</span> JobExecutionException
 { <br style="padding:0px; margin:0px">
                System.out.println(<span style="color:#0000ff; padding:0px; margin:0px">new</span> Date() + <span style="color:#800000; padding:0px; margin:0px">": doing something..."</span>); <br style="padding:0px; margin:0px">
        } <br style="padding:0px; margin:0px">
} <br style="padding:0px; margin:0px">
<br style="padding:0px; margin:0px">
<span style="color:#0000ff; padding:0px; margin:0px">class</span> Test { <br style="padding:0px; margin:0px">
        <span style="color:#0000ff; padding:0px; margin:0px">public</span> <span style="color:#0000ff; padding:0px; margin:0px">static</span> <span style="color:#0000ff; padding:0px; margin:0px">void</span> main(String[] args) { <br style="padding:0px; margin:0px">
                <span style="color:#008000; padding:0px; margin:0px">//1、创建JobDetial对象 </span><br style="padding:0px; margin:0px">
                JobDetail jobDetail = <span style="color:#0000ff; padding:0px; margin:0px">new</span> JobDetail(); <br style="padding:0px; margin:0px">
                <span style="color:#008000; padding:0px; margin:0px">//设置工作项 </span><br style="padding:0px; margin:0px">
                jobDetail.setJobClass(MyJob.<span style="color:#0000ff; padding:0px; margin:0px">class</span>); <br style="padding:0px; margin:0px">
                jobDetail.setName(<span style="color:#800000; padding:0px; margin:0px">"MyJob_1"</span>); <br style="padding:0px; margin:0px">
                jobDetail.setGroup(<span style="color:#800000; padding:0px; margin:0px">"JobGroup_1"</span>); <br style="padding:0px; margin:0px">
<br style="padding:0px; margin:0px">
                <span style="color:#008000; padding:0px; margin:0px">//2、创建Trigger对象 </span><br style="padding:0px; margin:0px">
                SimpleTrigger strigger = <span style="color:#0000ff; padding:0px; margin:0px">new</span> SimpleTrigger(); <br style="padding:0px; margin:0px">
                strigger.setName(<span style="color:#800000; padding:0px; margin:0px">"Trigger_1"</span>); <br style="padding:0px; margin:0px">
                strigger.setGroup(<span style="color:#800000; padding:0px; margin:0px">"Trigger_Group_1"</span>); <br style="padding:0px; margin:0px">
                strigger.setStartTime(<span style="color:#0000ff; padding:0px; margin:0px">new</span> Date()); <br style="padding:0px; margin:0px">
                <span style="color:#008000; padding:0px; margin:0px">//设置重复停止时间,并销毁该Trigger对象 </span><br style="padding:0px; margin:0px">
                java.util.Calendar c = java.util.Calendar.getInstance(); <br style="padding:0px; margin:0px">
                c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L); <br style="padding:0px; margin:0px">
                strigger.setEndTime(c.getTime()); <br style="padding:0px; margin:0px">
                strigger.setFireInstanceId(<span style="color:#800000; padding:0px; margin:0px">"Trigger_1_id_001"</span>); <br style="padding:0px; margin:0px">
                <span style="color:#008000; padding:0px; margin:0px">//设置重复间隔时间 </span><br style="padding:0px; margin:0px">
                strigger.setRepeatInterval(1000 * 1L); <br style="padding:0px; margin:0px">
                <span style="color:#008000; padding:0px; margin:0px">//设置重复执行次数 </span><br style="padding:0px; margin:0px">
                strigger.setRepeatCount(3); <br style="padding:0px; margin:0px">
<br style="padding:0px; margin:0px">
                <span style="color:#008000; padding:0px; margin:0px">//3、创建Scheduler对象,并配置JobDetail和Trigger对象 </span><br style="padding:0px; margin:0px">
                SchedulerFactory sf = <span style="color:#0000ff; padding:0px; margin:0px">new</span> StdSchedulerFactory(); <br style="padding:0px; margin:0px">
                Scheduler scheduler = <span style="color:#0000ff; padding:0px; margin:0px">null</span>; <br style="padding:0px; margin:0px">
                <span style="color:#0000ff; padding:0px; margin:0px">try</span> { <br style="padding:0px; margin:0px">
                        scheduler = sf.getScheduler(); <br style="padding:0px; margin:0px">
                        scheduler.scheduleJob(jobDetail, strigger); <br style="padding:0px; margin:0px">
                        <span style="color:#008000; padding:0px; margin:0px">//4、并执行启动、关闭等操作 </span><br style="padding:0px; margin:0px">
                        scheduler.start(); <br style="padding:0px; margin:0px">
<br style="padding:0px; margin:0px">
                } <span style="color:#0000ff; padding:0px; margin:0px">catch</span> (SchedulerException e) { <br style="padding:0px; margin:0px">
                        e.printStackTrace(); <br style="padding:0px; margin:0px">
                } <br style="padding:0px; margin:0px">
<span style="color:#008000; padding:0px; margin:0px">//                try { </span><br style="padding:0px; margin:0px">
<span style="color:#008000; padding:0px; margin:0px">//                        //关闭调度器 </span><br style="padding:0px; margin:0px">
<span style="color:#008000; padding:0px; margin:0px">//                        scheduler.shutdown(true); </span><br style="padding:0px; margin:0px">
<span style="color:#008000; padding:0px; margin:0px">//                } catch (SchedulerException e) { </span><br style="padding:0px; margin:0px">
<span style="color:#008000; padding:0px; margin:0px">//                        e.printStackTrace(); </span><br style="padding:0px; margin:0px">
<span style="color:#008000; padding:0px; margin:0px">//                } </span><br style="padding:0px; margin:0px">
        } <br style="padding:0px; margin:0px">
}</div>
</div>
</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
执行结果:</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<img alt="" src="http://img1.51cto.com/attachment/200907/200907231248314997265.png" style="padding:0px; margin:0px; vertical-align:top; border:none" border="0"></div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
当把结束时间改为:</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<div style="padding:0px; margin:0px">
<div style="padding:4px; margin:0px; border:1px solid rgb(204,204,204); font-size:10pt; width:705.59375px; color:rgb(0,0,0); word-break:break-all; line-height:16px; font-family:verdana,宋体; background-color:rgb(238,238,238)">
                <span style="color:#008000; padding:0px; margin:0px">//设置重复停止时间,并销毁该Trigger对象 </span><br style="padding:0px; margin:0px">
                java.util.Calendar c = java.util.Calendar.getInstance(); <br style="padding:0px; margin:0px">
                c.setTimeInMillis(System.currentTimeMillis() + 1000 * 1L); <br style="padding:0px; margin:0px">
                strigger.setEndTime(c.getTime());</div>
</div>
</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
执行结果:</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<img alt="" src="http://img1.51cto.com/attachment/200907/200907231248315065031.png" style="padding:0px; margin:0px; vertical-align:top; border:none" width="650" border="0"></div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
当添加一条关闭调度器的语句:</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<div style="padding:0px; margin:0px">
<div style="padding:4px; margin:0px; border:1px solid rgb(204,204,204); font-size:10pt; width:705.59375px; color:rgb(0,0,0); word-break:break-all; line-height:16px; font-family:verdana,宋体; background-color:rgb(238,238,238)">
                        <span style="color:#008000; padding:0px; margin:0px">//4、并执行启动、关闭等操作 </span><br style="padding:0px; margin:0px">
                        scheduler.start(); <br style="padding:0px; margin:0px">
                        scheduler.shutdown(<span style="color:#0000ff; padding:0px; margin:0px">true</span>); <br style="padding:0px; margin:0px">
</div>
</div>
</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
程序执行结果:</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<div style="padding:0px; margin:0px">
<div style="padding:4px; margin:0px; border:1px solid rgb(204,204,204); font-size:10pt; width:705.59375px; color:rgb(0,0,0); word-break:break-all; line-height:16px; font-family:verdana,宋体; background-color:rgb(238,238,238)">
Thu Jul 23 10:11:50 CST 2009: doing something... <br style="padding:0px; margin:0px">
<br style="padding:0px; margin:0px">
Process finished with exit code 0</div>
</div>
</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
仅仅执行了一次,这一次能执行完,原因是设定了scheduler.shutdown(true);true表示等待本次任务执行完成后停止。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
从这里也可以看出,scheduler是个容器,scheduler控制jobDetail的执行,控制的策略是通过trigger。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
当scheduler容器启动后,jobDetail才能根据关联的trigger策略去执行。当scheduler容器关闭后,所有的jobDetail都停止执行。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<span style="padding:0px; margin:0px">三、透过实例看原理</span></div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
通过研读Quartz的源代码,和本实例,终于悟出了Quartz的工作原理。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
1、scheduler是一个计划调度器容器(总部),容器里面可以盛放众多的JobDetail和trigger,当容器启动后,里面的每个JobDetail都会根据trigger按部就班自动去执行。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
2、JobDetail是一个可执行的工作,它本身可能是有状态的。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
3、Trigger代表一个调度参数的配置,什么时候去调。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
4、当JobDetail和Trigger在scheduler容器上注册后,形成了装配好的作业(JobDetail和Trigger所组成的一对儿),就可以伴随容器启动而调度执行了。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
5、scheduler是个容器,容器中有一个线程池,用来并行调度执行每个作业,这样可以提高容器效率。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
6、将上述的结构用一个图来表示,如下:</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<img alt="" src="http://img1.51cto.com/attachment/200907/200907231248316831062.png" style="padding:0px; margin:0px; vertical-align:top; border:none" border="0"></div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
<span style="padding:0px; margin:0px">四、总结</span></div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
1、搞清楚了上Quartz容器执行作业的的原理和过程,以及作业形成的方式,作业注册到容器的方法。就认识明白了Quartz的核心原理。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
2、Quartz虽然很庞大,但是一切都围绕这个核心转,为了配置强大时间调度策略,可以研究专门的CronTrigger。要想灵活配置作业和容器属性,可以通过Quartz的properties文件或者XML来实现。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
3、要想调度更多的持久化、结构化作业,可以通过数据库读取作业,然后放到容器中执行。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
4、所有的一切都围绕这个核心原理转,搞明白这个了,再去研究更高级用法就容易多了。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
5、Quartz与Spring的整合也非常简单,Spring提供一组Bean来支持:MethodInvokingJobDetailFactoryBean、SimpleTriggerBean、SchedulerFactoryBean,看看里面需要注入什么属性即可明白了。Spring会在Spring容器启动时候,启动Quartz容器。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
6、Quartz容器的关闭方式也很简单,如果是Spring整合,则有两种方法,一种是关闭Spring容器,一种是获取到SchedulerFactoryBean实例,然后调用一个shutdown就搞定了。如果是Quartz独立使用,则直接调用scheduler.shutdown(true);</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 </div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
7、Quartz的JobDetail、Trigger都可以在运行时重新设置,并且在下次调用时候起作用。这就为动态作业的实现提供了依据。你可以将调度时间策略存放到数据库,然后通过数据库数据来设定Trigger,这样就能产生动态的调度。</div>
<div style="padding:0px; margin:0px; color:rgb(85,85,85); font-family:宋体,'Arial Narrow',arial,serif; font-size:14px; line-height:28px">
 转自:<a target="_blank" href="http://lavasoft.blog.51cto.com/62575/181907/">http://lavasoft.blog.51cto.com/62575/181907/</a></div>
   
</div>




<!-- Baidu Button BEGIN -->




<div class="bdsharebuttonbox tracking-ad bdshare-button-style0-16" style="float: right;" data-mod="popu_172" data-bd-bind="1497425288596">
<a href="#" class="bds_more" data-cmd="more" style="background-position:0 0 !important; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=d754dcc0.png) !important" target="_blank"></a>
<a href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间" style="background-position:0 -52px !important" target="_blank"></a>
<a href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博" style="background-position:0 -104px !important" target="_blank"></a>
<a href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博" style="background-position:0 -260px !important" target="_blank"></a>
<a href="#" class="bds_renren" data-cmd="renren" title="分享到人人网" style="background-position:0 -208px !important" target="_blank"></a>
<a href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信" style="background-position:0 -1612px !important" target="_blank"></a>
</div>
<script>window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)];</script>
<!-- Baidu Button END -->

   

    
<!--172.16.140.12-->

<!-- Baidu Button BEGIN -->
<script type="text/javascript" id="bdshare_js" data="type=tools&uid=1536434" src="http://bdimg.share.baidu.com/static/js/bds_s_v2.js?cdnversion=415952"></script>

<script type="text/javascript">
    document.getElementById("bdshell_js").src = "http://bdimg.share.baidu.com/static/js/shell_v2.js?cdnversion=" + Math.ceil(new Date()/3600000)
</script>
<!-- Baidu Button END -->



 


        <div id="digg" articleid="48396127">
            <dl id="btnDigg" class="digg digg_enable" onclick="btndigga();">
               
                 <dt>顶</dt>
                <dd>0</dd>
            </dl>
           
              
            <dl id="btnBury" class="digg digg_enable" onclick="btnburya();">
              
                  <dt>踩</dt>
                <dd>0</dd>               
            </dl>
            
        </div>
     <div class="tracking-ad" data-mod="popu_222"><a href="javascript:void(0);" target="_blank"> </a>   </div>
    <div class="tracking-ad" data-mod="popu_223"> <a href="javascript:void(0);" target="_blank"> </a></div>
    <script type="text/javascript">
                function btndigga() {
                    $(".tracking-ad[data-mod='popu_222'] a").click();
                }
                function btnburya() {
                    $(".tracking-ad[data-mod='popu_223'] a").click();
                }
            </script>

   <ul class="article_next_prev">
                <li class="prev_article"><span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian']);location.href='/ye_sheng/article/details/48396093';">上一篇</span><a href="/ye_sheng/article/details/48396093" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_shangyipian'])">不知道数据库中表的列类型的前提下,使用JDBC正确的取出数据(取出Result结果集中的字段(不同类型))</a></li>
                <li class="next_article"><span onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian']);location.href='/ye_sheng/article/details/48396161';">下一篇</span><a href="/ye_sheng/article/details/48396161" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_xiayipian'])">quartz所需表的说明</a></li>
    </ul>

    <div style="clear:both; height:10px;"></div>


            <div class="similar_article">
                    <h4></h4>
                    <div class="similar_c" style="margin:20px 0px 0px 0px">
                        <div class="similar_c_t">
                            相关文章推荐
                        </div>
                   
                        <div class="similar_wrap tracking-ad" data-mod="popu_36" style="max-height:195px;">                       
                            <ul class="similar_list fl">    
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/zixiao217/article/details/53053598" title="Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail" strategy="" target="_blank" style="width: 290px;">Java任务调度框架Quartz入门教程指南(三)任务调度框架Quartz实例详解深入理解Scheduler,Job,Trigger,JobDetail</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/cuker919/article/details/48969579" title="深入解读Quartz的原理" strategy="" target="_blank" style="width: 290px;">深入解读Quartz的原理</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/EmmaGood/article/details/7912055" title="深入解读Quartz的原理" strategy="" target="_blank" style="width: 290px;">深入解读Quartz的原理</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/u010964403/article/details/16803769" title="quartz的原理实现" strategy="" target="_blank" style="width: 290px;">quartz的原理实现</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/h2731667843/article/details/4517130" title="quartz的原理" strategy="" target="_blank" style="width: 290px;">quartz的原理</a>
                                   </li>
                            </ul>
                              <ul class="similar_list fr">      
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/lqk654321/article/details/50534827" title="quartz 源码分析" strategy="" target="_blank" style="width: 290px;">quartz 源码分析</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://hangyu608.iteye.com/blog/1973961" title="纯代码实现Quartz定时器(一)" strategy="" target="_blank" style="width: 290px;">纯代码实现Quartz定时器(一)</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://aiien007.iteye.com/blog/2105833" title="开源定时器quartz入门 " strategy="" target="_blank" style="width: 290px;">开源定时器quartz入门 </a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/u010648555/article/details/54863144" title="Quartz学习——Quartz大致介绍(一)" strategy="" target="_blank" style="width: 290px;">Quartz学习——Quartz大致介绍(一)</a>
                                   </li>
                                   <li>
                                       <em>•</em>
                                       <a href="http://blog.csdn.net/codemosi/article/details/72858855" title="【Quartz】深入Job、JobDetail、JobDataMap、Trigger" strategy="" target="_blank" style="width: 290px;">【Quartz】深入Job、JobDetail、JobDataMap、Trigger</a>
                                   </li>
                            </ul>
                        </div>
                    </div>
                </div>   
      

你可能感兴趣的:(quartz定时器)