0 0

如何做一个时间可控制的定时任务0

有一个需求 一个页面配置时间,后台根据页面配置的时间定时运行任务。比如说在页面上配置15分钟。在后台就要每15分钟运行这个方法。这样如何实现呢?spring quartz的好像都是写死的时间。求一个完整的例子或者是思路 谢谢!!

问题补充:有人吗?   
2013年8月27日 20:12

3个答案 按时间排序 按投票排序

0 0

spring quartz  是可以实现的 

package com.cnpc.framework.util.quartz;

import java.util.Date;
import java.util.List;

import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.SimpleTrigger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

import com.cnpc.classify.scan.dao.ScanTaskDao;
import com.cnpc.classify.scan.model.ScanTask;

import common.Logger;

public class TimerJob implements ApplicationContextAware {
	//获得工厂
		Logger log=(Logger) LoggerFactory.getLogger(TimerJob.class);
		private Scheduler scheduler;      
	    public void setScheduler(Scheduler scheduler) {      
	        this.scheduler = scheduler;      
	    }  
	    
		//删除任务
	    public void revokeTask(Integer id){
	    	try {
	    		//移除触发器
	    		SimpleTrigger simpleTrigger = (SimpleTrigger)scheduler.getTrigger("my_" + id, Scheduler.DEFAULT_GROUP);
	    	    if(null != simpleTrigger){
	    	    	scheduler.unscheduleJob(simpleTrigger.getName(), Scheduler.DEFAULT_GROUP);
	    	    }
			} catch (SchedulerException e) {
				e.printStackTrace();
			}
	    }
	    
	  //下达任务
	  	public boolean insertTrigger(Integer scanTask,Date d) {
	  		Integer id=scanTask;
	  		Date dtime = d;
	  		log.info("ID:"+id);
			
	  		long repeatInterval =0L;
	  		//long repeatInterval =scanTask.getTimeSpace().getTime(); //测试 时使用的间隔时间
	  		//验证是否有任务
	  		try {
	  			SimpleTrigger checkSimpleTrigger = (SimpleTrigger)scheduler.getTrigger("my_" + id, Scheduler.DEFAULT_GROUP);
	  			 if(null != checkSimpleTrigger){
	  		    	return false;
	  		    }
	  		} catch (SchedulerException e1) {
	  			e1.printStackTrace();
	  		}
	  		if(null!=dtime){
	  			try {
	  				//动态及动态产生一个人任务  跟一个触发器 交由Scheduler工厂管理
	  				 //1.新建一个任务  2.分配入默认的组 3.执行工作的BEAN 需实现JOB 接口  并实现execute方法
	  				 JobDetail jobDetail =  new JobDetail("reportJob_" + id, Scheduler.DEFAULT_GROUP,MyJob.class);   
	  				 
	  				 //执行0次,每0L秒执行一次  null为结束时间 dtime为开始时间更多详情请官网 查询 或者GOOGLE
	  				 //复杂的定时任务
	  				 SimpleTrigger trigger = new SimpleTrigger("trigger_" + id,Scheduler.DEFAULT_GROUP,dtime,null,0,0L);
	  				 
	  	             scheduler.getContext().put("applicationContext",applicationContext);
	  	           
	  	             
	  	             //启动新增定时器任务    
	  	             scheduler.scheduleJob(jobDetail, trigger); 
	  	             scheduler.start();
	  				return true;
	  			} catch (Exception e) {
	  				revokeTask(id);
	  				e.printStackTrace();
	  			}
	  		}
	  		return false;
	  	}
		
		//初始化数据库任务
		public void initJobTrigger(){
			  
		}
		
		private ApplicationContext applicationContext=null;
		@Override
		public void setApplicationContext(ApplicationContext arg0)
				throws BeansException {
			this.applicationContext=arg0;
			
		}
}




<bean id="scanPushTask" class="com.cnpc.framework.util.quartz.ScanPushTask">
		<property name="scheduler" ref="schedulerFactory" />
		<property name="scanTaskDao" ref="scanTaskDao" />
	</bean>
	<!-- test impl -->
	<bean id="soatest" class="com.cnpc.framework.util.quartz.SOAManagerImpl">
	</bean>
	
	
	<bean autowire="no" id="schedulerFactory"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref local="initTrigger" />
				 <!--<ref local="initTriggerTimer" />-->
				<ref local="cronTriggerClassifyInfoClear" />
				<ref local="cronTriggerAddPartition" />
				<ref local="cronTriggerclassifyWebManagerJob" />
			</list>
		</property>
		<property name="taskExecutor" ref="executor" />
	</bean>
	
	<!-- 配置定时任务,用于初始化定时器 -->
	<bean id="executionJobDetail"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject">
			<ref bean="scanPushTask" />
		</property>
		<property name="targetMethod">
			<value>initJobTrigger</value>
		</property>
		<property name="concurrent" value="true" />
	</bean>
	<bean id="initTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail">
			<ref bean="executionJobDetail" />
		</property>
		<property name="cronExpression">
			<value>* * * * * ?</value>
		</property>
		<!-- 以毫秒为单位,启动后一分钟触发 -->
		<property name="startDelay">
			<value>60000</value>
		</property>
	</bean>
	
	<!-- 线程池配置 -->
	<bean id="executor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
		 <property name="corePoolSize" value="10" />
		 <property name="maxPoolSize" value="100" />
		 <property name="queueCapacity" value="500" />
	</bean>

2013年8月28日 13:39
0 0

有用程序添加的定时器

http://blog.csdn.net/longg_yang/article/details/5836188

简单适用

2013年8月27日 23:11
0 0

quartz应该还有另外一种任务,不是配置在配置文件中,而是把任务插入到quartz定义的表中,里面有关于时间,是否只运行一次等参数的配置

2013年8月27日 22:15

相关推荐

    页面控制定时任务源码

    在IT行业中,页面控制定时任务是一种常见的需求,它主要用于实现网页上的某些功能自动化执行或定期更新。例如,可能需要在用户界面中定时刷新数据、自动发送通知或者在特定时间执行某些计算任务。这个主题主要涉及两...

    Spring+Quartz 从数据库中获取定时任务和定时时间,动态实现对定时任务的增删改查

    在IT行业中,定时任务是许多应用的核心组成部分,用于在特定时间执行特定的业务逻辑。Spring框架结合Quartz库,提供了一种强大而灵活的方式来管理这些定时任务。本项目旨在演示如何利用Spring和Quartz从数据库中动态...

    furion内置的定时任务使用学习,动态添加定时任务代码

    `HomeController.cs` 可能包含了一个控制器,用于展示或者管理定时任务。通过HTTP请求,用户可以触发任务的动态添加、删除或修改。在控制器中,我们可以调用Furion提供的API,如`BackgroundJob.Enqueue`来添加一次性...

    springboot定时任务的动态开启关闭

    Spring Boot提供了Spring Scheduler抽象来实现这样的需求,使得开发者能够方便地管理和控制定时任务。本篇文章将深入探讨如何在Spring Boot中实现定时任务的动态开启和关闭。 首先,我们需要引入Spring Boot的`...

    定时任务测试样例

    【定时任务测试样例】是基于SpringBoot框架和Quartz库设计的一个测试工具,主要用于模拟和验证定时任务的管理功能。在IT行业中,定时任务是系统自动化的重要组成部分,它们允许程序按照预设的时间间隔执行特定操作,...

    定时任务插件_K3Cloud定时任务插件_

    在企业信息化管理中,定时任务是不可或缺的一部分,它能够自动化执行一些定期的任务,比如数据备份、报表生成、系统维护等,从而提高工作效率,减少人工干预。K3Cloud作为一款先进的企业资源计划系统,其定时任务...

    java动态管理定时任务

    在Java开发中,定时任务是不可或缺的一部分,尤其在企业级应用中,用于执行定期的数据处理、报表生成、系统维护等工作。Spring框架与Quartz库的整合提供了强大的动态管理定时任务的能力。下面我们将深入探讨这个主题...

    SSH+quartz实现的可动态配置时间规则的定时任务

    SSH+quartz实现的可动态配置时间规则的定时任务是一个在IT行业中常见的需求,尤其是在企业级应用和服务中,为了实现自动化运维、数据处理或者业务触发等目的。SSH指的是Spring、Struts和Hibernate这三个Java开发框架...

    furion内置的定时任务使用学习

    首先,Furion的定时任务是基于Hangfire库进行封装的,Hangfire是一个成熟的异步后台任务处理框架,它可以将复杂的后台任务转化为简单的API调用。Furion通过简化其API和集成到自身框架中,使得开发者无需深入了解...

    C# quartz.net 定时任务源码 可以远程控制

    综上所述,这个项目提供了一种使用C#和Quartz.NET创建可远程控制的定时任务解决方案。它不仅能够根据需求动态加载新的DLL扩展任务,还能够作为Windows服务稳定运行,满足了企业级应用对定时任务的高要求。对于想要...

    易语言定时任务插件示例

    3. **API调用**:通过`cornsdk.ec`提供的API,你可以方便地控制定时任务的启动、暂停、恢复和停止。理解这些API的工作原理和使用方法是至关重要的。 4. **配置文件解析**:`.dll.json`配置文件的解析是读取和应用...

    基于thinkphp5框架的定时执行任务

    在我们的场景中,可以创建一个行为类来处理定时任务。 下面是一个简单的步骤来实现基于ThinkPHP5的定时任务: 1. **创建行为类**:在`app\behavior`目录下创建一个新的PHP文件,例如`ScheduledTaskBehavior.php`,...

    易语言 Crontab 定时任务执行模块 v1.2 支持单位秒 也可做计时器源码

    总之,易语言 Crontab 定时任务执行模块 v1.2 是一个强大的工具,能够帮助开发者在易语言环境下实现复杂的定时任务和计时功能,通过熟悉并熟练使用这个模块,可以提升你的程序自动化水平,提高效率。

    定时任务启动多线线程示例

    总结起来,Spring定时任务结合多线程可以有效地提高系统的并发能力,使得在预设的时间间隔内,多个任务能并行执行,从而提高整体的处理效率。在实际开发中,根据业务需求调整定时任务的触发频率和线程池的配置,可以...

    java quartz 定时任务

    Java Quartz 是一个强大的开源任务调度库,用于在Java应用程序中创建和管理定时任务。Quartz 提供了丰富的API,使得开发者能够灵活地定义任务,并精确控制任务的执行时间。本项目利用Quartz 实现了基于Cron表达式的...

    thinkPHP3.2.3定时执行任务

    在IT行业中,定时任务是系统自动化的一个重要组成部分,它允许我们按照预设的时间间隔执行特定的任务,无需人工干预。在Web开发中,ThinkPHP框架是一个非常流行的PHP开发框架,而ThinkPHP3.2.3是其3.x版本的一个稳定...

    Quart定时任务.zip

    在本项目中,我们将深入探讨如何使用Quartz来管理定时任务,包括任务的新增、暂停、删除和更新,以及处理时间可变的情况。 1. **Quartz基本概念** - **Job**: Job是执行的任务实体,包含具体的业务逻辑。 - **...

    asp.net定时任务(定时器)

    在这个场景下,我们讨论的是如何在ASP.NET环境中设置一个定时器,使得页面加载或IIS启动后,该定时任务每隔10秒执行一次。 1. **定时任务原理**: ASP.NET定时任务通常基于`System.Threading.Timer`类或者`System....

    Quartz.net作业调度自定义定时执行任务多任务执行c#

    Quartz.NET是一个强大的开源作业调度框架,用于在.NET环境中创建和执行定时任务。它提供了高度灵活的调度功能,使得开发者可以轻松地定义和控制任务的执行时间。在"Quartz.net作业调度自定义定时执行任务多任务执行...

    spring定时任务实现

    首先,Java的`java.util.Timer`是一个基础的定时任务工具,它可以按照设定的频率执行任务,但无法在特定时间点触发。由于其功能相对简单,且在某些场景下不够灵活,因此在实际项目中使用较少。 接着,Quartz是一个...

Global site tag (gtag.js) - Google Analytics