关于quartz执行时的现象 各位有谁遇到过这样的问题。一个简单任务以固定周期执行无限次的时候,执行一段时间quartz表中的记录就消失了任务停止。 奇怪的是为什么quartz表中的数据会在执行过程中消失,而且也没有异常和日志出来! 希望有经验的各位能指点一下。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 quartz还有这个问题的?关注中,现在的程序中有用到这个组件,是在sping中用该组件配置定时作业,不知道会不会出现这个问题。 真没碰到过,我觉得可能是你的store存储配置有问题 Scheduler scheduler = factory.getScheduler();JobDetail jobDetail = new JobDetail("job1", "group1", HelloJob.class);// 触发器监听TriggerListener triggerListener = new SingleTriggerListener("0");scheduler.addTriggerListener(triggerListener);// 任务参数传递(随便写的测试一下)JobDataMap map = jobDetail.getJobDataMap();for (int i = 0; i < 2; i++) { map.put("param" + i, "1");}// 简单触发器SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1", "group1");// 执行周期simpleTrigger.setRepeatInterval(5000);// 执行次数simpleTrigger.setRepeatCount(simpleTrigger.REPEAT_INDEFINITELY);// 触发器设置监听名称simpleTrigger.addTriggerListener(triggerListener.getName());// 调度器加载scheduler.scheduleJob(jobDetail, simpleTrigger);if (!scheduler.isShutdown()) { // 启动 scheduler.start();} 这个是我触发器监听程序:public class SingleTriggerListener implements TriggerListener { Log logger = LogFactory.getLog(SingleTriggerListener.class); // 执行任务ID private String executeId; public SingleTriggerListener(String executeId) { this.executeId = executeId; } public String getName() { return "TriggerListener" + executeId; } public void triggerComplete(Trigger arg0, JobExecutionContext arg1, int arg2) { if (arg2 == 3) { logger.info("触发器" + executeId + "完成!"); } } public void triggerFired(Trigger arg0, JobExecutionContext arg1) { } public void triggerMisfired(Trigger arg0) { } public boolean vetoJobExecution(Trigger arg0, JobExecutionContext arg1) { return false; }} 我看了一下,你应该用的是RAM的存储吧,有可能你一关服务,或者内存中任务丢失掉了。。你看看是不是你的任务都是存储在内存中的?最好把你的quartzs.properties或者相关配置信息贴出来 这是属性文件配置## 集群的配置信息org.quartz.scheduler.instanceName = DefaultQuartzScheduler org.quartz.scheduler.rmi.export = false org.quartz.scheduler.rmi.proxy = false org.quartz.scheduler.wrapJobExecutionInUserTransaction = false ## 线程池配置信息org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPoolorg.quartz.threadPool.threadCount = 10org.quartz.threadPool.threadPriority = 5org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = trueorg.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.dataSource = qzDSorg.quartz.dataSource.qzDS.driver = oracle.jdbc.driver.OracleDriverorg.quartz.dataSource.qzDS.URL = jdbc:oracle:thin:@10.144.99.100:1521:SCHEDULERorg.quartz.dataSource.qzDS.user = QUARTZorg.quartz.dataSource.qzDS.password = 123456org.quartz.dataSource.qzDS.maxConnections = 10另外以固定的次数执行是没有问题的! 没看出来啥没有出现任何异常就停掉了吗?scheduler停了,还是在调度池中没有任务了?如果是任务不见了的话org.quartz.threadPool.threadCount = 10 我觉得可能是同时存在的任务过多?如果是调度停了的话,那应该是出现了什么异常吧? 我只执行一个简单的任务,只不过这个任务执行无限次,每次间隔5S。执行时任务信息会保存在DB中并且一直存在!但是现在问题是,执行过程中QUARTZ表中的任务消失了,也没有异常.时间不是固定的,有的时候执行100次才会消失,有的时候执行10次就消失了,有的时候我停止了服务,表中的数据也会消失。 hibernate中多次点击造成的session关闭 求高手解决!!要实现的是从后台传数据到前台 ireport 修改布局报NULL JNA 怎么模拟 C里面的unsigned数据类型 ? ojdbc14.jar驱动 关于WEBLOGIC和WTC在LINUX上乱码的问题 jsp 如何解决Applet往servlet传递中文参数 并且可能包含等号(网上很多方法都尝试过) b/s,c/s 关于这两个概念的问题 两个网站,两个域名,如何部署在一台服务器上 用java编写考试系统的查询共能代码?急急 请问下:在servlet和applet通信 servlet传序列化地想的问题
JobDetail jobDetail = new JobDetail("job1", "group1", HelloJob.class);
// 触发器监听
TriggerListener triggerListener = new SingleTriggerListener("0");
scheduler.addTriggerListener(triggerListener);
// 任务参数传递(随便写的测试一下)
JobDataMap map = jobDetail.getJobDataMap();
for (int i = 0; i < 2; i++) {
map.put("param" + i, "1");
}
// 简单触发器
SimpleTrigger simpleTrigger = new SimpleTrigger("trigger1", "group1");
// 执行周期
simpleTrigger.setRepeatInterval(5000);
// 执行次数
simpleTrigger.setRepeatCount(simpleTrigger.REPEAT_INDEFINITELY);
// 触发器设置监听名称
simpleTrigger.addTriggerListener(triggerListener.getName());
// 调度器加载
scheduler.scheduleJob(jobDetail, simpleTrigger);
if (!scheduler.isShutdown()) {
// 启动
scheduler.start();
}
public class SingleTriggerListener implements TriggerListener {
Log logger = LogFactory.getLog(SingleTriggerListener.class);
// 执行任务ID
private String executeId; public SingleTriggerListener(String executeId) {
this.executeId = executeId;
} public String getName() {
return "TriggerListener" + executeId;
} public void triggerComplete(Trigger arg0, JobExecutionContext arg1, int arg2) {
if (arg2 == 3) {
logger.info("触发器" + executeId + "完成!");
}
} public void triggerFired(Trigger arg0, JobExecutionContext arg1) {
} public void triggerMisfired(Trigger arg0) {
} public boolean vetoJobExecution(Trigger arg0, JobExecutionContext arg1) {
return false;
}}
org.quartz.scheduler.instanceName = DefaultQuartzScheduler
org.quartz.scheduler.rmi.export = false
org.quartz.scheduler.rmi.proxy = false
org.quartz.scheduler.wrapJobExecutionInUserTransaction = false
## 线程池配置信息
org.quartz.threadPool.class = org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount = 10
org.quartz.threadPool.threadPriority = 5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread = trueorg.quartz.jobStore.class = org.quartz.impl.jdbcjobstore.JobStoreTXorg.quartz.jobStore.tablePrefix = QRTZ_org.quartz.jobStore.dataSource = qzDSorg.quartz.dataSource.qzDS.driver = oracle.jdbc.driver.OracleDriver
org.quartz.dataSource.qzDS.URL = jdbc:oracle:thin:@10.144.99.100:1521:SCHEDULER
org.quartz.dataSource.qzDS.user = QUARTZ
org.quartz.dataSource.qzDS.password = 123456
org.quartz.dataSource.qzDS.maxConnections = 10另外以固定的次数执行是没有问题的!
但是现在问题是,执行过程中QUARTZ表中的任务消失了,也没有异常.
时间不是固定的,有的时候执行100次才会消失,有的时候执行10次就消失了,有的时候我停止了服务,表中的数据也会消失。