spring中使用quarts实现任务定制与管理
这是一篇关于在spring框架中使用quarts项目的教程,刚刚在项目中完成了相关功能的实现,所以写这篇文件以记录与分享为目的,也方便自己以后需要时查询。
大概功能模块是,实现动态为多个门对象设置定时器,考虑到可能出现对同一个门进行多次定时器参数的修改,决定以一个门对应一个trigger的方式来实现配置,因为每个门都做同一个任务所以这些trigger共用一个jobdetail对象即可。
首先在spring配置文件中配置一个jobDetail对象:
<bean name="quartststTask" class="org.springframework.scheduling.quartz.JobDetailBean">
<property name="jobClass" value="com.zk.acc.bean.QuartsTst"></property>
</bean>
由于采用动态设置trigger对象,所以在配置文件中不配置trigger对象,只配置了一个SchedulerFactoryBean,用于等下在代码中动态往这个SchedulerFactoryBean中添加trigger对象:
<bean name="txt" class= "org.springframework.scheduling.quartz.SchedulerFactoryBean" scope="singleton">
<property name="triggers">
<list>
<!-- 此处可以设置trigger对象,但我们默认为空 -->
</list>
</property>
</bean>
接着配置一个bean用于实现具体操作,需要将SchedulerFactoryBean对象注入
<bean id="test" class="com.zk.acc.web.AccQuartsTestAction">
<property name="scheduler" ref="txt"></property>
</bean>
这是action文件中的具体实现方法:
public String setQuarts() throws SchedulerException{
用于确保schedule对象一定要存在,
//System.out.println("appConfig.getProperty"+appConfig.getProperty("acc.doorStart"));
Resource rs = new FileSystemResource("...src/main/resources/conf/applicationContext-acc.xml");
@SuppressWarnings("deprecation")
BeanFactory factory = new XmlBeanFactory(rs);
if(scheduler==null){
scheduler = (Scheduler) factory.getBean("txt");
}
获取用户界面选择的doorid参数,多个门id用“,”分隔故:
String checkedDoorIdArr[] = ids.split(",");//被选中的门的id
String strAry[] = time1.split(":");//用于某一次批量设置的CronExpression参数
String pushTime = "0 "+strAry[1]+" "+strAry[0]+“ ”+" ? * *";
获取spring配置文件中配置的jobdetail
JobDetail jdDetail = (JobDetail) factory.getBean("quartststTask");
最后是判断schedule中trigger与动态配置trigger的流程
CronTriggerBean trigger;
for(String str:checkedDoorIdArr){//根据门的数量动态设置触发器的数量
try
{
trigger = new CronTriggerBean(); //动态设置trigger对象
JobDataMap jdMap = trigger.getJobDataMap(); //定义一个jobdatamap用于存储参数
jdMap.put("doorId", str);
trigger.setBeanName(str);
trigger.setName(str);
trigger.setGroup(Scheduler.DEFAULT_GROUP);
trigger.setJobName(jdDetail.getName());
try
{
trigger.setCronExpression(pushTime);//设置用户输入的某个门定时器执行时间
String originConExpression = trigger.getCronExpression();
System.out.println(originConExpression+"11111111111");
System.out.println(scheduler.getTrigger(str, scheduler.DEFAULT_GROUP));
System.out.println(scheduler.getJobNames(scheduler.DEFAULT_GROUP).length);
//Trigger str1[] = scheduler.getTriggersOfJob(jdDetail.getName(), jdDetail.getGroup());
if("".equals(scheduler.getTrigger(str, scheduler.DEFAULT_GROUP))||scheduler.getTrigger(str, scheduler.DEFAULT_GROUP)==null){
//如果某个触发器trigger对象在schedul中不存在,也就是在这里进行新加操作
if(scheduler.getJobNames(scheduler.DEFAULT_GROUP).length>0){//判断jobdetail对象是否已经存在在schedule中
//如果已经存在,只需要新加trigger
scheduler.scheduleJob(trigger);
}else{
//如果不存在,则需要绑定jobdetail对象到schedule中去
scheduler.scheduleJob(jdDetail,trigger);
}
//scheduler.scheduleJob(jdDetail,trigger);
//scheduler.start();
}else{//如果该trigger已经存在在schedule中的情况下(即再次对某个门从新设置触发时间的情况),就只是重置schedule中的这个trigger对象
System.out.println("triggername为"+str+"已存在!!重置该trigger");
scheduler.rescheduleJob(str, Scheduler.DEFAULT_GROUP, trigger);
System.out.println(scheduler.getTrigger(str, scheduler.DEFAULT_GROUP));
System.out.println(scheduler.getJobNames(scheduler.DEFAULT_GROUP).length);
// Trigger str1[] = scheduler.getTriggersOfJob(jdDetail.getName(), jdDetail.getGroup());
}
}
catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
spring中使用quarts实现任务定制与管理相关推荐
- [原创] 在spring 中使用quarts
1.使用maven加载 quarts 的jar 1 <dependency> 2 <groupId>org.quartz-scheduler</groupId> 3 ...
- 在Spring中使用JTA事务管理
在Spring中使用JTA事务管理 Spring 通过AOP技术可以让我们在脱离EJB的情况下享受声明式事务的丰盛大餐,脱离Java EE应用服务器使用声明式事务的道路已经畅通无阻.但是很大部分人都还 ...
- 在Spring中使用JOTM实现JTA事务管理
Spring 通过AOP技术可以让我们在脱离EJB的情况下享受声明式事务的丰盛大餐,脱离Java EE应用服务器使用声明式事务的道路已经畅通无阻.但是很大部分人都还认为脱离Java EE应用服务器就无 ...
- 惊呆了,Spring中竟然有12种定义bean的方法
前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...
- spring中那些让你爱不释手的代码技巧
紧接上文<spring中这些能升华代码的技巧,可能会让你爱不释手>.本文继续总结我认为spring中还不错的知识点,希望对您有所帮助. 一. @Conditional的强大之处 不知道你们 ...
- Spring中加载xml配置文件的六种方式
Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog 因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...
- java中属性文件读取案例_java相关:Spring中属性文件properties的读取与使用详解
java相关:Spring中属性文件properties的读取与使用详解 发布于 2020-6-3| 复制链接 摘记: Spring中属性文件properties的读取与使用详解实际项目中,通常将一些 ...
- 如何在优雅地Spring 中实现消息的发送和消费
本文将对rocktmq-spring-boot的设计实现做一个简单的介绍,读者可以通过本文了解将RocketMQ Client端集成为spring-boot-starter框架的开发细节,然后通过一个 ...
- Quartz在Spring中设置动态定时任务 .
什么是动态定时任务: 是由客户制定生成的,服务端只知道该去执行什么任务,但任务的定时是不确定的(是由客户制定).这样总不能修改配置文件每定制个定时任务就增加一个trigger吧,即便允许客户修改配置文 ...
最新文章
- 1.java注释的类型_HappyBKs教你写Java注解(1)——注解的分类、运行机制、作用域及概念汇总...
- python计算每月工资-[Python] 2018新税法下工资计算
- linux下如何查看chm文件
- Redirecting to binsystemctl start crond.service
- 登陆 tomcat manager
- Ray集群搭建 Python Demo
- Windows下的Makefile
- js window.onload 加载多个函数的两种方法
- CEBX格式的文档如何转换为PDF格式文档、DOCX文档?
- Linux下安装McAfee防病毒软件(企业版本)
- Xcode 之真机调试
- [摘]研究方法 - 实证研究
- 计算机光盘无法格式化,怎么格式化光盘啊??求解!!
- Digital Radiography厂家
- 『认知升级』是比其他一切都更加重要的思维模型转变
- 【SQLserver】使用openrowset方法导入EXCEL表格数据
- hive静态与动态分区理解
- iOS 消息转发(Message Forwarding)
- 诸葛io的技术架构图_大数据平台的三次浪潮和诸葛io自身架构演变历程 (3)
- 第七届“飞思卡尔”杯全国大学生智能汽车竞赛 赛后感想