最近在改造一个项目, 由于需要使用定时任务处理一些工作, 于是使用了quartz. 由于对原有项目和quartz都不是很熟, 开发当中出现了这样一个问题:每执行一次quartz任务, 打印出的日志信息就越多.
1、Job类:
[code="java"]
public class MyTimerTask {
......
//群发短信
public void startProcessSendSmsGroup(){
logger.info("群送短信定时任务开始执行..........." + System.currentTimeMillis());
try {
this.sendSmsGroupService.send(); // 开始发送告警
} catch (Exception e) {
logger.error("执行MyTimerTask任务调度时发生错误!", e);
}
logger.info("群发短信定时任务执行结束..........." + System.currentTimeMillis());
}
......
}
[/code]
2、quartz在Spring中的配置:
[code="xml"]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<!-- 向主任务类注入业务Bean -->
class="com.lenovo.platform.util.timer.MyTimerTask">
<!-- 设置调度任务 -->
<bean id="jobDetailProcessSendSmsGroup"
class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
<property name="targetObject">
<ref bean="myTimerTask" />
</property>
<property name="targetMethod">
<value>startProcessSendSmsGroup</value>
</property>
</bean>
<!-- 设置调度引擎, 详细设置各调度任务与时间规则 -->
<bean id="cronTriggerProcessSendSmsGroup"
class="org.springframework.scheduling.quartz.CronTriggerBean">
<property name="jobDetail">
<ref bean="jobDetailProcessSendSmsGroup" />
</property>
<property name="cronExpression">
<value>0 0/1 * * * ?</value>
</property>
</bean>
<bean
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<property name="triggers">
<list>
<ref local="cronTriggerProcessSendSmsGroup" />
</list>
</property>
</bean>
[/code]
3、
运行过程中打印出的日志如下:
第一次执行任务:
2008-11-12 10:19:00,109 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456340109>
2008-11-12 10:19:00,203 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456340203>
第二次执行任务:
2008-11-12 10:20:00,031 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456400015>
118406 [DefaultQuartzScheduler_Worker-2] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456400015
2008-11-12 10:20:00,203 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456400203>
118578 [DefaultQuartzScheduler_Worker-2] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456400203
第三次执行任务:
2008-11-12 10:21:00,015 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456460015>
178390 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456460015
178390 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456460015
2008-11-12 10:21:00,031 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456460031>
178406 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456460031
178406 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456460031
......
2008-11-12 10:24:00,015 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <处理Syslog定时任务开始执行...........1226456640015>
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
2008-11-12 10:24:00,046 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456640046>
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
由于有多个任务, 像这样执行下去, catalina.out不用几天就达到上百G, 搞得服务器都没空间, 真是令我苦恼。请问各位朋友有没有遇到这种问题,朋友们帮忙解决一下,谢谢啦!!
[b]问题补充:[/b]
最近在改造一个项目, 由于需要使用定时任务处理一些工作, 于是使用了quartz. 由于对原有项目和quartz都不是很熟, 开发当中出现了这样一个问题:每执行一次quartz任务, 打印出的日志信息就越多.
1、Job类:
public class MyTimerTask { ...... //群发短信 public void startProcessSendSmsGroup(){ logger.info("群送短信定时任务开始执行..........." + System.currentTimeMillis()); try { this.sendSmsGroupService.send(); // 开始发送告警 } catch (Exception e) { logger.error("执行MyTimerTask任务调度时发生错误!", e); } logger.info("群发短信定时任务执行结束..........." + System.currentTimeMillis()); } ...... }
2、quartz在Spring中的配置:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <!-- 向主任务类注入业务Bean --> <bean id="myTimerTask" class="com.lenovo.platform.util.timer.MyTimerTask"> <property name="sendSmsGroupService"> <ref bean="sendSmsGroupService" /> </property> </bean> <!-- 设置调度任务 --> <bean id="jobDetailProcessSendSmsGroup" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject"> <ref bean="myTimerTask" /> </property> <property name="targetMethod"> <value>startProcessSendSmsGroup</value> </property> </bean> <!-- 设置调度引擎, 详细设置各调度任务与时间规则 --> <bean id="cronTriggerProcessSendSmsGroup" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail"> <ref bean="jobDetailProcessSendSmsGroup" /> </property> <property name="cronExpression"> <value>0 0/1 * * * ?</value> </property> </bean> <bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref local="cronTriggerProcessSendSmsGroup" /> </list> </property> </bean> </beans>
3、
运行过程中打印出的日志如下:
第一次执行任务:
2008-11-12 10:19:00,109 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456340109>
2008-11-12 10:19:00,203 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456340203>
第二次执行任务:
2008-11-12 10:20:00,031 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456400015>
118406 [DefaultQuartzScheduler_Worker-2] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456400015
2008-11-12 10:20:00,203 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456400203>
118578 [DefaultQuartzScheduler_Worker-2] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456400203
第三次执行任务:
2008-11-12 10:21:00,015 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群送短信定时任务开始执行...........1226456460015>
178390 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456460015
178390 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群送短信定时任务开始执行...........1226456460015
2008-11-12 10:21:00,031 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456460031>
178406 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456460031
178406 [DefaultQuartzScheduler_Worker-8] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456460031
......
2008-11-12 10:24:00,015 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <处理Syslog定时任务开始执行...........1226456640015>
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
358390 [DefaultQuartzScheduler_Worker-4] INFO com.lenovo.platform.util.timer.MyTimerTask - 处理Syslog定时任务开始执行...........1226456640015
2008-11-12 10:24:00,046 INFO [com.lenovo.platform.util.timer.MyTimerTask] - <群发短信定时任务执行结束...........1226456640046>
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
358421 [DefaultQuartzScheduler_Worker-9] INFO com.lenovo.platform.util.timer.MyTimerTask - 群发短信定时任务执行结束...........1226456640046
由于有多个任务, 像这样执行下去, catalina.out不用几天就达到上百G, 搞得服务器都没空间, 真是令我苦恼。请问各位朋友有没有遇到这种问题,朋友们帮忙解决一下,谢谢啦!!
[color=red]哈, 大概发现问题所在了, 那程序里面有一段是发短信的程序. 当发送短信的设备不存在时, 会陷入等待状态.
我发现一等待时, 下次任务再执行时, 就会多一些类似DefaultQuartzScheduler_Worker*的信息.
zhjb2000说得挺接近的
[/color]