现在有两个问题想问一下:1. 假如说同一时间触发了好几个job,那么如何设置这几个job的优先级,quartz_jobs.xml中代码如:
<job>
        <job-detail>
            <name>BillingProcessTimer</name>
            <group>checker</group>
            <job-class>cn.com.carsmart.ws.job.BillingProcessTimer</job-class>
        </job-detail>
        <trigger>
            <cron>
                <name>BillingProcessTimer</name>
                <group>checker</group>
                <job-name>BillingProcessTimer</job-name>
                <job-group>checker</job-group>
                <cron-expression>0 0/15 * * * ?</cron-expression>
            </cron>
        </trigger>
    </job>
,quartz.properties中代码如:
org.quartz.scheduler.instanceName = BillingScheduler
#org.quartz.scheduler.instanceId = one
org.quartz.scheduler.instanceId = AUTO
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount =  1
org.quartz.threadPool.threadPriority = 4
org.quartz.plugin.triggHistory.class = org.quartz.plugins.history.LoggingTriggerHistoryPlugin
org.quartz.plugin.triggHistory.triggerFiredMessage = Trigger {1}.{0} fired job {6}.{5} at: {4, date, HH:mm:ss MM/dd/yyyy}
org.quartz.plugin.triggHistory.triggerCompleteMessage = Trigger {1}.{0} completed firing job {6}.{5} at {4, date, HH:mm:ss MM/dd/yyyy} with resulting trigger instruction code: {9}
org.quartz.plugin.jobInitializer.class = org.quartz.plugins.xml.JobInitializationPlugin
org.quartz.plugin.jobInitializer.fileName = quartz_job.xml
org.quartz.plugin.jobInitializer.overWriteExistingJobs = true
org.quartz.plugin.jobInitializer.failOnFileNotFound = true
org.quartz.plugin.shutdownhook.class = org.quartz.plugins.management.ShutdownHookPlugin
org.quartz.plugin.shutdownhook.cleanShutdown = true;2.有没有一个时间表达式可以实现,每小时执行一次(但排除每月1号 00:00---08:00)这样的表达式有吗,或者实现思路也可;谢谢,期待您的回复;

解决方案 »

  1.   

    第一个问题尝试下能不能在代码里面设定线程优先级,Thread类里好像有个setPriority方法
    第二个问题,如果没记错的话,quartz的cront格式是秒  分  时  日期  月份  星期  
    那么可以这样设置 * * 9-23/1 2-31 * *
    意思就是除去一号之外,每天9点到23点,每一小时执行一次
      

  2.   


    你好,第一个问题时碰到这种情况
    <job>
            <job-detail>
                <name>BillingProcessTimer</name>
                <group>checker</group>
                <job-class>cn.com.carsmart.ws.job.BillingProcessTimer</job-class>
            </job-detail>
            <trigger>
                <cron>
                    <name>BillingProcessTimer</name>
                    <group>checker</group>
                    <job-name>BillingProcessTimer</job-name>
                    <job-group>checker</job-group>
                    <cron-expression>0 0/15 * * * ?</cron-expression>
                </cron>
            </trigger>
        </job>
        <job>
            <job-detail>
                <name>AccountAllProcessTimer</name>
                <group>checker</group>
                <job-class>cn.com.carsmart.ws.job.AccountAllProcessTimer</job-class>
            </job-detail>
            <trigger>
                <cron>
                    <name>AccountAllProcessTimer</name>
                    <group>checker</group>
                    <job-name>AccountAllProcessTimer</job-name>
                    <job-group>checker</job-group>
                    <cron-expression>0 0/30 * * * ?</cron-expression>
                    <!-- <cron-expression>0 0 2 1 * ?</cron-expression> -->
                </cron>
            </trigger>
        </job>
    我设定了线程池只能执行一个线程,当两个或者更多的job在同一时间点同时触发的时候,我想设定这个优先顺序,比如一定要先执行第一个,在执行第二个,基于上面设置的有没有设定优先级的方式;
    第二个问题,有没有这样的表达式,每月1号9--23点 再加上每月2号--30或31号所有时间每小时执行一次?谢谢您的回复!
      

  3.   

    第一个问题:不清楚能不能直接在quartz-job的配置文里配置每个job的优先级,但是,你可以试下在具体实现job的代码里面设定当前线程的优先级。
    第二个问题:把这个拆分成两个任务就可以啦,执行相同的job,只是cront一个设置为:
    * * 9-23/1 1 * *   ===>  每月1号,9-23点每搁一小时执行一次
    一个设置为:* * */1 2-31 * *  =====>  每月2-31号,每小时执行一次,不用担心没有30,31号的情况,没有31号就不执行