-
实现quartz的时间规则的动态配置以及动态开启和关闭0
实现quartz的时间规则的动态配置以及动态开启和关闭(即在页面中可以点击开启或关闭可以关闭某个任务,不影响其他的任务)
要求单独使用quartz不要结合spring,小弟没有弄过这块,有哪位大哥帮忙弄个简单的例子吗?在此谢过2013年12月09日 17:47
3个答案 按时间排序 按投票排序
-
首先说句,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
-
首先明确几个概念:
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实现的可动态配置时间规则的定时任务是一个在IT行业中常见的需求,尤其是在企业级应用和服务中,为了实现自动化运维、数据处理或者业务触发等目的。SSH指的是Spring、Struts和Hibernate这三个Java开发框架...
而Spring的配置则负责任务的实例化、触发规则以及与Quartz的集成。 在实际开发中,可能还需要考虑任务的并发控制、异常处理、任务间的依赖关系等问题。例如,你可以通过`DisallowConcurrentExecution`注解确保同一...
`SchedulerFactoryBean`会自动处理Scheduler的初始化和关闭,以及与Quartz相关的其他设置。 ```xml <bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <!-- ...
Spring 也支持使用 `@Component` 注解来定义 Job 类,以及 `@Configuration` 和 `@EnableScheduling` 来开启任务调度。 4. **Scheduler 配置**:在 Spring 配置中,可以使用 `@Configuration` 类来定义 `...
Quartz支持多种触发策略,如简单触发器、cron触发器等,允许灵活地设置任务执行的时间规则。 将Hibernate3与Quartz1结合,我们可以实现数据库定时查询和数据记录插入的任务。例如,我们可能需要定期检查数据库中的...
- 提供的源码中,你应该能看到完整的Spring配置、Quartz作业实现、触发器定义以及如何将它们整合在一起的示例。 - `SpringQuartz`项目中的`pom.xml`文件会列出所有依赖,包括Spring和Quartz的相关库。 - 将项目...
3. **配置调度器**:使用Quartz.NET的`IScheduler`和`StandardSchedulerFactory`来创建和配置调度器,设定作业触发的时间规则。 4. **启动调度器**:启动调度器,使其按照预定规则执行作业。 具体代码示例中,`...
在本实例中,我们将探讨如何在Java Web环境中设置和执行定时任务,以及涉及到的相关技术和工具。 首先,Java Web定时任务通常通过Java的定时框架如Quartz或Spring的TaskScheduler来实现。Quartz是一个开源的作业...
在Spring Boot中,我们可以使用`@ServerEndpoint`注解来定义WebSocket端点,并使用`@OnOpen`、`@OnMessage`、`@OnClose`和`@OnError`来处理客户端连接打开、接收到消息、连接关闭和错误事件。Spring Boot还提供了...
在Java中,有多种实现定时任务调度的方式,包括但不限于Java内置的`java.util.Timer`类、Spring框架的`@Scheduled`注解以及Quartz库。 1. **Java内置的`java.util.Timer`和`TimerTask`**: - `Timer`类用于创建一...
6. 采用Quartz进行任务排程,支持异步邮件处理,使用Velocity模板进行邮件内容定制,并支持邮件打开和连接点击跟踪,这些都为运营者提供了强大的后台管理功能。 7. BroadLeaf Commerce采用模块化设计,提供了与信用...
在Spring Boot框架中,`springboot-scheduler`是用于实现定时任务的重要组件,它基于Spring的Task Execution和Scheduling模块,使得在应用中添加和管理定时任务变得简单易行。这个"springboot-scheduler定时任务学习...
这个模块提供了多种定时任务的支持,如基于Java的`@Scheduled`注解、Quartz调度器和`ThreadPoolTaskScheduler`等。其中,`@Scheduled`注解是针对简单定时任务的最简便方式,它允许开发者直接在方法上声明定时规则。 ...
- 在数据库中执行`jeethink.sql`和`quartz.sql`两个脚本,这些脚本可能随着JeeThink版本的不同而有所改变。 2. **开发环境配置**: - 编辑`/src/main/resources/application.yml`,调整默认端口(例如,默认为803...
1. 自动化事务管理:JFinal提供了自动化的事务管理,开发者只需要关注业务逻辑,无需手动开启和关闭事务。 2. 数据缓存:JFinal集成了Memcached和Redis等缓存服务,可以有效提升数据访问速度。 3. RESTful支持:...
FlyCms 是一个类似知乎以问答为基础的完全开源的JAVA语言开发的社交网络建站程序,基于 Spring Boot+Bootstrap3+MyBatis+MYSQL+Solr+Ehcache 应用架构,专注于社区内容的整理、归类和检索,它集合了问答,digg,wiki...