先看一段配置。<!-- ******************定义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的数据库,没次执行,会插入到一张表里面一些数据,如果数据插入的时间太慢(也就是数据过大)的时候,那么该线程(比如是“年”的)的时间片完了,切换到另外一个线程(比如是“下半年”的线程)。会不会因为这样数据库会产生死锁?第二个问题
我发现上面的任务,有些到了时间根本就不会执行。。希望高手帮忙。。
<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的数据库,没次执行,会插入到一张表里面一些数据,如果数据插入的时间太慢(也就是数据过大)的时候,那么该线程(比如是“年”的)的时间片完了,切换到另外一个线程(比如是“下半年”的线程)。会不会因为这样数据库会产生死锁?第二个问题
我发现上面的任务,有些到了时间根本就不会执行。。希望高手帮忙。。
解决方案 »
- 文件上传问题
- org.apache.struts2.dispatcher.FilterDispatche
- 谁能详细说下集中编码方式的区别?
- 请问 xerces 与 sax 是什么关系, xerces 是什么啊?
- struts的简单问题,抢答
- 高手请留步--运行hibenate3.1的错误
- 请教javamail高手,复合邮件读取问题!!!!!!!1急
- 用JAVA开发系统用什么编译环境最好?
- J2EE服务器端高级编程(professional java server programming J2EE Edition),谁有,万分感谢!
- 关于Double数值相加的问题
- SSH 中怎么调用存储过程获得存储过程的结果集?
- hibernate保存时错误FlushMode.NEVER/MANUAL
<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>测试过多个任务执行也没有问题。
我上面那个是以前写的测试多个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();
}
}}
我也是个新手,希望能帮助到你。
/**
* 周处理
*/
public synchronized void weekTarget() {
System.out.println(simpleDateFormat.format(new Date()));
System.err.println("---------------进周处理");
}