先看一段配置。<!-- ******************定义JobDetail*********************  -->
<bean id="targetService"
class="com.jwx.dcim.sars.query.action.TargetService" />
<!-- 年 -->
<bean id="yearJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="targetService" />
<property name="targetMethod" value="yearTarget" />
<property name="concurrent" value="false" />
</bean>
<!-- 半年 -->
<bean id="yearHalfJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="targetService" />
<property name="targetMethod" value="yearHalfTarget" />
<property name="concurrent" value="false" />
</bean>
<!-- 季度 -->
<bean id="quarterJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="targetService" />
<property name="targetMethod" value="quarterTarget" />
<property name="concurrent" value="false" />
</bean>
<!-- 月 -->
<bean id="monthJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="targetService" />
<property name="targetMethod" value="monthTarget" />
<property name="concurrent" value="false" />
</bean>
<!-- 旬 -->
<bean id="xunJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="targetService" />
<property name="targetMethod" value="xunTarget" />
<property name="concurrent" value="false" />
</bean>
<!-- 周 -->
<bean id="weekJob"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject" ref="targetService" />
<property name="targetMethod" value="weekTarget" />
<property name="concurrent" value="false" />
</bean>
<!-- ******************定义Trigger 格式:秒,分,时,日期(?),月份,星期(?),年(可选)************* -->
<!-- 每年  -->
<bean id="yearTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="yearJob" />
<property name="cronExpression" value="10 59 23 L 12 ? " />
</bean> <!-- 上半年,下半年  -->
<bean id="yearHalfTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="yearHalfJob" />
<property name="cronExpression" value="20 59 23 L 6,12 ? " />
</bean> <!-- 季度  -->
<bean id="quarterTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="quarterJob" />
<property name="cronExpression" value="30 59 23 L 5,8,11,2 ? " />
</bean>
<!-- 月  -->
<bean id="monthTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="monthJob" />
<property name="cronExpression" value="40 59 23 L * ? " />
</bean> <!-- 旬统计  -->
<bean id="xunTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="xunJob" />
<property name="cronExpression" value="50 59 23 1/10 * ? " />
</bean> <!-- 周统计  -->
<bean id="weekTrigger"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail" ref="weekJob" />
<property name="cronExpression" value="59 59 23 ? * 1 " />
</bean>
 
<!-- ******************定义Scheduler*********************  -->
<bean id="schedule"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<!-- 
<ref bean="yearTrigger" />
<ref bean="yearHalfTrigger" />
<ref bean="quarterTrigger" />
<ref bean="monthTrigger" />
<ref bean="xunTrigger" />
 -->
<ref bean="weekTrigger" />
</list>
</property>
<property name="autoStartup" value="true" />
</bean>/**
 * 年处理
 */
public void yearTarget() {
 
System.err.println("---------------进年处理");
} /**
 * 半年处理
 */
public void yearHalfTarget() {
System.out.println(simpleDateFormat.format(new Date()));
System.err.println("---------------进半年处理");
} /**
 * 季度处理
 */
public void quarterTarget() {
System.out.println(simpleDateFormat.format(new Date()));
System.err.println("---------------进季度处理");
} /**
 * 月处理
 */
public void monthTarget() {
System.out.println(simpleDateFormat.format(new Date()));
System.err.println("---------------进月处理");
} /**
 * 旬处理
 */
public void xunTarget() {
System.out.println(simpleDateFormat.format(new Date()));
System.err.println("---------------进旬处理");
} /**
 * 周处理
 */
public void weekTarget() {
System.out.println(simpleDateFormat.format(new Date()));
System.err.println("---------------进周处理");
}需求是这样的。
 我想每周,每半年,每季度,每月,每旬,每周在数据库里生成一些数据并插入到一张表中。第一个问题
  但是如果光是以上的配置,我发现好像不能完成,因为比如一年的最后一天,就会执行,每年,下半年,每月,每旬,每周(如果最后一天正好是星期天),而这几个任务都会执行,而没一个任务执行,都是是个线程来控制,我用的是sqlserver2000的数据库,没次执行,会插入到一张表里面一些数据,如果数据插入的时间太慢(也就是数据过大)的时候,那么该线程(比如是“年”的)的时间片完了,切换到另外一个线程(比如是“下半年”的线程)。会不会因为这样数据库会产生死锁?第二个问题
  我发现上面的任务,有些到了时间根本就不会执行。。希望高手帮忙。。

解决方案 »

  1.   

    我用的是quartz而不是spring的框架。<?xml version='1.0' encoding='utf-8'?>
    <quartz>
    <job>
      
    <job-detail>
      
    <name>test</name>
      
    <group>DEFAULT</group>
      
    <description>testJobhere</description>
      
    <job-class>mail.SecondJob</job-class>
      
    <job-data-map allows-transient-data="true">
      
    <entry>
      
    <key>name</key>
      
    <value>test</value>
      
    </entry>
    </job-data-map>
      
    </job-detail>
      
    <trigger>
    <cron>
    <name>testCron</name>
    <group>DEFAULT</group>
    <job-name>test</job-name>
    <job-group>DEFALUT</job-group>
    <cron-expression>0 0/1 * * * ?</cron-expression>
    </cron>
    </trigger>
     
    </job>
    <job>
    <job-detail>
      
    <name>test2</name>
      
    <group>fangy</group>
      
    <description>one</description>
      
    <job-class>mail.TestJob</job-class>
      
    <job-data-map allows-transient-data="true">
      
    <entry>
      
    <key>name</key>
      
    <value>test2</value>
      
    </entry>
    </job-data-map>
      
    </job-detail> <trigger>
    <cron>
    <name>testother</name>
    <group>new</group>
    <job-name>test2</job-name>
    <job-group>fangy</job-group>
    <cron-expression>0 0/2 * * * ?</cron-expression>
    </cron>
    </trigger>
    </job>
    </quartz>测试过多个任务执行也没有问题。
      

  2.   

    先谢谢楼上的,,但是quartz我不是很了解啊只是以前做过一次,,现在都忘了。。我昏。。能不能详细一点呢?
      

  3.   

    http://daoger.javaeye.com/blog/195486 可以参考一下
      

  4.   

    实现job接口,配置XML文件,properties文件满大街都有就不提供了。
    我上面那个是以前写的测试多个job的,是没有问题的,可以拷贝下来改一改。package mail;import org.quartz.Job;
    import org.quartz.JobExecutionContext;
    import org.quartz.JobExecutionException;
    public class SecondJob implements Job { public void execute(JobExecutionContext arg0) throws JobExecutionException {
    try{
    //你要执行的任务
                                //...
    System.out.println("第一个任务--------------------------");
    }catch(Exception e){
    e.printStackTrace();
    }


    }}
    我也是个新手,希望能帮助到你。
      

  5.   


        /**
         * 周处理
         */
        public synchronized void weekTarget() {
            System.out.println(simpleDateFormat.format(new Date()));
            System.err.println("---------------进周处理");
        }