0 0

实现quartz的时间规则的动态配置以及动态开启和关闭0

实现quartz的时间规则的动态配置以及动态开启和关闭(即在页面中可以点击开启或关闭可以关闭某个任务,不影响其他的任务)

要求单独使用quartz不要结合spring,小弟没有弄过这块,有哪位大哥帮忙弄个简单的例子吗?在此谢过
2013年12月09日 17:47

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

0 0

   

2015年4月22日 18:00
0 0

首先说句,spring和quartz没有太大关系 spring可以说只是一个更方便的工具

下面给你贴段代码,如果你读过quartz的文档就会明白quartz动态是咋实现的。


@Service
public class QuartzServiceImpl extends
		BaseServiceImpl<JobDetails, String, QuartzTaskVO> implements
		QuartzService {

	private JobDetailsJpaDao jobDetailsJpaDao;

	public JobDetailsJpaDao getJobDetailsJpaDao() {
		return jobDetailsJpaDao;
	}

	@Autowired
	public QuartzServiceImpl(JobDetailsJpaDao jobDetailsJpaDao,
			BaseJdbcDao baseJdbcDao) {
		super((BaseJpaRepository<JobDetails, String>) jobDetailsJpaDao,
				baseJdbcDao);
		this.jobDetailsJpaDao = jobDetailsJpaDao;
	}

	@Autowired
	private Scheduler scheduler;

	@ServiceDesc("查询当前活动的任务列表")
	@Override
	public Map<String, Object> queryActiveTaskMap(JobDetailsQueryParam param) {
		SQLQueryUtil util = new SQLQueryUtil();
		util.addTable("QRTZ_TRIGGERS");
		util.addColumn("SCHED_NAME", "schedule_name");
		util.addColumn("JOB_NAME", "job_name");
		util.addColumn("JOB_GROUP", "job_group");
		util.addColumn("TRIGGER_NAME", "trigger_name");
		util.addColumn("TRIGGER_GROUP", "trigger_group");
		util.addColumn("PREV_FIRE_TIME", "prev_fire_time");
		util.addColumn("NEXT_FIRE_TIME", "next_fire_time");
		util.addColumn("START_TIME", "start_time");
		util.addColumn("END_TIME", "end_time");
		util.addColumn("TRIGGER_STATE", "trigger_state");

		return super.queryDataMapNotExtend(util, QuartzTaskVO.class, param);
	}

	@Override
	@ServiceDesc("启动任务")
	public void startTask(String jobId, String triggerId) throws AppException {
		TaskId id = new TaskId(jobId, triggerId);
		try {
			scheduler.scheduleJob(id.getJobDetails().getJobDetail(), id
					.getTriggers().getTrigger());
		} catch (SchedulerException e) {
			throw new AppException(ResultCode.Failure, e.getMessage());
		} catch (ClassNotFoundException e) {
			throw new AppException(ResultCode.Failure, e.getMessage());
		}
	}

	@Override
	@ServiceDesc("暂停任务")
	public void pauseTask(String... ids) throws AppException {
		try {
			for (String idStr : ids) {
				scheduler.pauseJob(new TaskId(idStr).getJobKey());
			}
		} catch (SchedulerException e) {
			throw new AppException(ResultCode.Failure, e.getMessage());
		}
	}

	@Override
	@ServiceDesc("恢复任务")
	public void resumeTask(String... ids) throws AppException {
		try {
			for (String idStr : ids) {
				scheduler.resumeJob(new TaskId(idStr).getJobKey());
			}
		} catch (SchedulerException e) {
			throw new AppException(ResultCode.Failure, e.getMessage());
		}
	}

	@Override
	@ServiceDesc("删除任务")
	public void deleteTask(String... ids) throws AppException {
		try {
			for (String idStr : ids) {
				scheduler.deleteJob(new TaskId(idStr).getJobKey());
			}
		} catch (SchedulerException e) {
			throw new AppException(ResultCode.Failure, e.getMessage());
		}
	}

}

class TaskId {

	/**
	 * id字符串格式: jobName:jobGroup;triggerName:triggerGroup
	 */
	public TaskId(String id) {
		this.jobKey = new JobKey(id.split(";")[0].split(":")[0],
				id.split(";")[0].split(":")[1]);
		this.triggerKey = new TriggerKey(id.split(";")[1].split(":")[0],
				id.split(";")[1].split(":")[1]);
	}

	public TaskId(String jobId, String triggerId) {
		JobDetailsService jobDetailsService = (JobDetailsService) SpringContextUtil
				.getUtil().getBean(JobDetailsService.class);
		TriggersService triggersService = (TriggersService) SpringContextUtil
				.getUtil().getBean(TriggersService.class);
		this.jobDetails = jobDetailsService.get(jobId);
		this.triggers = triggersService.get(triggerId);
		this.jobKey = new JobKey(jobDetails.getJobName(),
				jobDetails.getJobGroup());
		this.triggerKey = new TriggerKey(triggers.getTriggerName(),
				triggers.getTriggerGroup());
	}

	private JobDetails jobDetails;

	private Triggers triggers;

	private JobKey jobKey;

	private TriggerKey triggerKey;

	public JobDetails getJobDetails() {
		return jobDetails;
	}

	public void setJobDetails(JobDetails jobDetails) {
		this.jobDetails = jobDetails;
	}

	public Triggers getTriggers() {
		return triggers;
	}

	public void setTriggers(Triggers triggers) {
		this.triggers = triggers;
	}

	public JobKey getJobKey() {
		return jobKey;
	}

	public void setJobKey(JobKey jobKey) {
		this.jobKey = jobKey;
	}

	public TriggerKey getTriggerKey() {
		return triggerKey;
	}

	public void setTriggerKey(TriggerKey triggerKey) {
		this.triggerKey = triggerKey;
	}

}

2013年12月10日 09:29
0 0

首先明确几个概念:
1. scheduler:任务(job)调度器
2. trigger:任务(job)调度器
3. job:任务
比较重要的几个关系:
1. scheduler和trigger都是为job服务的,scheduler更像一个容器,存储job及其相关的信息的;
2. trigger,顾名思义就是来告诉scheduler,什么时候调度已经在容器(scheduler)中的job;
3. 我记得1.8中好像一个trigger只能指定给一个job(2.*的我就不清楚了,最近没怎么看),具体的我有点模糊了,不过没必要将两个job指定给一个job;
4. 整合spring和不整合spring的区别在于谁来初始化、管理scheduler,quartz本身也提供的SchdulerFactory对象来创建scheduler。

剩下的基本上就清楚了
1. 创建一个scheduler
2. 创建job,绑定trigger --- > 这个有个综合的概念jobdetail
3. 添加、移除jobDetail(你的问题在这里,就是在1中增加和移除就可以了)

大致的意思就是这样...

2013年12月09日 18:03

相关推荐

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

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

    转:spring多个定时任务quartz配置

    而Spring的配置则负责任务的实例化、触发规则以及与Quartz的集成。 在实际开发中,可能还需要考虑任务的并发控制、异常处理、任务间的依赖关系等问题。例如,你可以通过`DisallowConcurrentExecution`注解确保同一...

    Quartz2.2.1存储与持久化-基于Spring的配置

    `SchedulerFactoryBean`会自动处理Scheduler的初始化和关闭,以及与Quartz相关的其他设置。 ```xml &lt;bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"&gt; &lt;!-- ...

    spring3整合quartz1.8和spring3整合quartz2.2两个版本示例

    Spring 也支持使用 `@Component` 注解来定义 Job 类,以及 `@Configuration` 和 `@EnableScheduling` 来开启任务调度。 4. **Scheduler 配置**:在 Spring 配置中,可以使用 `@Configuration` 类来定义 `...

    hibernate3+quartz1

    Quartz支持多种触发策略,如简单触发器、cron触发器等,允许灵活地设置任务执行的时间规则。 将Hibernate3与Quartz1结合,我们可以实现数据库定时查询和数据记录插入的任务。例如,我们可能需要定期检查数据库中的...

    Spring+Quartz2.2.0+Demo源码实战演练【精华篇2014】

    - 提供的源码中,你应该能看到完整的Spring配置、Quartz作业实现、触发器定义以及如何将它们整合在一起的示例。 - `SpringQuartz`项目中的`pom.xml`文件会列出所有依赖,包括Spring和Quartz的相关库。 - 将项目...

    C#\NET 定时执行写日志任务解决方案

    3. **配置调度器**:使用Quartz.NET的`IScheduler`和`StandardSchedulerFactory`来创建和配置调度器,设定作业触发的时间规则。 4. **启动调度器**:启动调度器,使其按照预定规则执行作业。 具体代码示例中,`...

    java web定时任务 实例

    在本实例中,我们将探讨如何在Java Web环境中设置和执行定时任务,以及涉及到的相关技术和工具。 首先,Java Web定时任务通常通过Java的定时框架如Quartz或Spring的TaskScheduler来实现。Quartz是一个开源的作业...

    基于Springboot websocket + js实现的即时聊天系统.zip

    在Spring Boot中,我们可以使用`@ServerEndpoint`注解来定义WebSocket端点,并使用`@OnOpen`、`@OnMessage`、`@OnClose`和`@OnError`来处理客户端连接打开、接收到消息、连接关闭和错误事件。Spring Boot还提供了...

    java定时任务调度

    在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring框架的`@Scheduled`注解以及Quartz库。 1. **Java内置的`java.util.Timer`和`TimerTask`**: - `Timer`类用于创建一...

    springboot-scheduler定时任务学习demo源码

    在Spring Boot框架中,`springboot-scheduler`是用于实现定时任务的重要组件,它基于Spring的Task Execution和Scheduling模块,使得在应用中添加和管理定时任务变得简单易行。这个"springboot-scheduler定时任务学习...

    Java开源电商系统BroadLeaf文档

    6. 采用Quartz进行任务排程,支持异步邮件处理,使用Velocity模板进行邮件内容定制,并支持邮件打开和连接点击跟踪,这些都为运营者提供了强大的后台管理功能。 7. BroadLeaf Commerce采用模块化设计,提供了与信用...

    Spring定时器TimerTask用法

    这个模块提供了多种定时任务的支持,如基于Java的`@Scheduled`注解、Quartz调度器和`ThreadPoolTaskScheduler`等。其中,`@Scheduled`注解是针对简单定时任务的最简便方式,它允许开发者直接在方法上声明定时规则。 ...

    JeeThink环境使用手册1

    - 在数据库中执行`jeethink.sql`和`quartz.sql`两个脚本,这些脚本可能随着JeeThink版本的不同而有所改变。 2. **开发环境配置**: - 编辑`/src/main/resources/application.yml`,调整默认端口(例如,默认为803...

    jfinal开发实例

    1. 自动化事务管理:JFinal提供了自动化的事务管理,开发者只需要关注业务逻辑,无需手动开启和关闭事务。 2. 数据缓存:JFinal集成了Memcached和Redis等缓存服务,可以有效提升数据访问速度。 3. RESTful支持:...

    开源中国源码

    FlyCms 是一个类似知乎以问答为基础的完全开源的JAVA语言开发的社交网络建站程序,基于 Spring Boot+Bootstrap3+MyBatis+MYSQL+Solr+Ehcache 应用架构,专注于社区内容的整理、归类和检索,它集合了问答,digg,wiki...

Global site tag (gtag.js) - Google Analytics