Spring4.2.1+quartz2.2.1整合,集群分布式调度
来源:互联网 发布:老司机软件排行 编辑:程序博客网 时间:2024/04/29 07:37
之前做项目很多时候也用到spring的定时任务,不过由于项目的用户量小,一直没有深入研究如果是采用服务器集群作为项目部署,怎么才能让定时任务间能够协调工作?毕竟每个定时任务都有自己承载的业务,如果偷懒点,一台部署定时任务,其他不部署貌似也行,不过哪天一不小心服务器挂了怎么办?快过年了,刚好有时间静下来好好看看怎么处理这个问题场景。
这两天没少百度,经常看着别人写的都有视觉疲劳了。很多配置都很像,但是真的用到自己的项目中又是问题百出。下面我分享下这两天的成果吧~
1. 在项目中添加quartz相关的jar包,quartz-2.2.1.jar和quartz-job-2.2.1.jar;(原本我的项目架构就是使用springMVC,spring的包已经添加了,这里不多说了),主要的是在数据库创建相关的11张表,下载包里面就有。
2. 在src目录下添加quartz.properties
3. 创建JobDetailBean类,继承QuartzJobBean
3. 创建2个定时任务,DemoJob和DemoJob2(2个写法一样,只是个实例)
4.在src目录下添加applicationContext-quartz.xml
<?xmlversion="1.0"encoding="UTF-8"?>
<beansxmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- 任务1 -->
<beanid="demoJobDetail"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<propertyname="jobClass"value="com.weizx.quartz.JobDetailBean"/>
<propertyname="durability"value="true"/>
<propertyname="description"value="测试job"/>
<propertyname="jobDataAsMap">
<map>
<entrykey="targetObject"value="demoJob"/>
<entrykey="targetMethod"value="execute"/>
</map>
</property>
</bean>
<beanid="demoJobTrigger"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<propertyname="jobDetail"ref="demoJobDetail"/>
<propertyname="cronExpression"value="0/5 * * * * ?"/>
</bean>
<!-- 任务2 -->
<beanid="demoJobDetail2"
class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
<propertyname="jobClass"value="com.weizx.quartz.JobDetailBean"/>
<propertyname="durability"value="true"/>
<propertyname="description"value="测试job2"/>
<propertyname="jobDataAsMap">
<map>
<entrykey="targetObject"value="demoJob2"/>
<entrykey="targetMethod"value="execute"/>
</map>
</property>
</bean>
<beanid="demoJobTrigger2"
class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
<propertyname="jobDetail"ref="demoJobDetail2"/>
<propertyname="cronExpression"value="0/8 * * * * ?"/>
</bean>
<!-- 以下是Quartz定时调度配制 -->
<beanid="schedulerFactory"
class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
<propertyname="configLocation"value="classpath:quartz.properties"/>
<propertyname="dataSource"ref="dataSource"/>
<propertyname="applicationContextSchedulerContextKey"value="applicationContext"/>
<!--可选,QuartzScheduler 启动时更新己存在的Job,这样就不用每次修改targetObject后删除qrtz_job_details表对应记录了 -->
<propertyname="overwriteExistingJobs"value="true"/>
<!-- 设置自动启动 -->
<propertyname="autoStartup"value="true"/>
<propertyname="startupDelay"value="5"/>
<propertyname="triggers">
<list>
<refbean="demoJobTrigger"/>
<refbean="demoJobTrigger2"/>
</list>
</property>
</bean>
</beans>
5.在web.xml中添加applicationContext-quartz.xml
启动项目,查看控制台,运行结果如下:
我实践过程中主要遇到的问题:
我的项目是用mysql作为数据库,连接的驱动jar为mysql-connector-java-5.1.13.jar,结果一直报错,后来查了下才知道是jar包不兼容,网上说要mysql-connector-java-5.1.36及以上的,我这里用mysql-connector-java-5.1.40,没有问题。
- Spring4.2.1+quartz2.2.1整合,集群分布式调度
- spring4.2.2+quartz2.2.1整合
- quartz2.2.1和spring4.1.4整合使用
- spring4+quartz2.2.1
- spring4.1.5+quartz2.2.1
- Spring4整合quartz2.3,集群定时任务处理
- spring4集成quartz2.2.1(maven)
- spring4.1.5 配置quartz2.2.1
- spring4.1.6配置quartz2.2.1
- Spring4+Quartz2计划任务集群
- Spring4.0.1+Quartz2.2.1实现定时任务调度[亲测可用]
- Quartz2.2.1+spring4.0.6出现的异常
- spring4.1.2使用quartz2.2.1定时器
- spring4.1.6配置quartz2.2.1(maven)
- spring4.1+shiro1.2.3+quartz2.2.1
- Spring之——quartz集群的问题及解决方案(基于Spring4.0+quartz2.2.1的集群架构)
- Spring之——quartz集群的问题及解决方案(基于Spring4.0+quartz2.2.1的集群架构)
- spring4整合quartz2.x集群配置,并实现任务计数功能
- HDU1078 FatMouse and Cheese(DFS记忆化搜索)
- 出现org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)的解决方法
- 【SSH】Spring框架学习
- 线性表之循环队列
- HDU2782 The Worm Turns(DFS水)
- Spring4.2.1+quartz2.2.1整合,集群分布式调度
- C语言随机函数
- MySQL自学笔记3--模糊查询
- oracle12c sqlplus乱码
- 2017从Android工程师到策略工程师的转型——序章
- UVA 10189 Minesweeper
- LeetCode 20. Valid Parentheses
- UGUI基于EventTrigger的UI交互事件监听系统&动态加载
- MySQL自学笔记4--where、from、exists型子查询