spring mvc quartz 实现分布式任务调度

在做项目中,我们不可避免的会使用到定时任务,在之前的博客中,我写了两篇关于定时任务的文章,请先阅读那两篇博客(MethodInvokingJobDetailFactoryBean:无法传递参数,JobDetailFactoryBean :可传递参数),在来阅读这篇。

在实际项目中,需要用到分布式的环境,于是就想到了quartz自带的分布式定时任务,在项目中采用的是MethodInvokingJobDetailFactoryBean(定时任务比较简单,没有传递参数的需求),于是就是用此方式搭建定时任务。

先说一下搭建quartz分布式定时任务的步骤:

1.从quartz官网获取分布式定时任务需要的表(使用分布式定时任务需要将定时任务信息存储在数据库中)

2.定时quartz的配置文件

3.引用quartz的配置文件

注:如何实现动态的定时任务参考我之前的博客

1.spring quartz动态实现对任务的增删改查

2.spring quartz动态实现对任务的增删改查(可传参数)

表结构可以去quartz的官网上进行下载,quartz的配置文件如下:

quartz.properties

#\u8C03\u5EA6\u5668\u540D\u79F0
org.quartz.scheduler.instanceName=MyScheduler
#\u5982\u679C\u4F7F\u7528\u96C6\u7FA4instanceId\u5FC5\u987B\u552F\u4E00,\u9700\u8981\u8BBE\u7F6E\u4E3AAUTO
org.quartz.scheduler.instanceId=AUTO

#\u7EBF\u7A0B\u6C60\u5C5E\u6027
org.quartz.threadPool.class=org.quartz.simpl.SimpleThreadPool
org.quartz.threadPool.threadCount=10
org.quartz.threadPool.threadPriority=5
org.quartz.threadPool.threadsInheritContextClassLoaderOfInitializingThread=true
org.quartz.jobStore.misfireThreshold=60000

#\u662F\u5426\u4F7F\u7528\u96C6\u7FA4
org.quartz.jobStore.isClustered=true

# jobStore \u6301\u4E45\u6362\u914D\u7F6E
#\u5B58\u50A8\u65B9\u5F0F\u4F7F\u7528JobStoreTX,\u4E5F\u5C31\u662F\u6570\u636E\u5E93
org.quartz.jobStore.class=org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass=org.quartz.impl.jdbcjobstore.StdJDBCDelegate
#\u6570\u636E\u5E93\u4E2Dquartz\u8868\u540D\u7684\u524D\u7F00
org.quartz.jobStore.tablePrefix=QRTZ_


org.quartz.jobStore.dataSource=myDS

#\u914D\u7F6E\u6570\u636E\u6E90(\u5C06\u5B9A\u65F6\u4EFB\u52A1\u6301\u4E45\u5316\u5230\u6570\u636E\u5E93\u4E2D\u9700\u8981\u4F7F\u7528\u6570\u636E\u6E90)
org.quartz.dataSource.myDS.driver=com.mysql.jdbc.Driver
org.quartz.dataSource.myDS.URL=jdbc:mysql://localhost:3306/api
org.quartz.dataSource.myDS.user=root
org.quartz.dataSource.myDS.password=root
org.quartz.dataSource.myDS.validationQuery=select 0 from dual

引用quartz的配置文件

<bean id="schedulerFactoryBean" class="org.springframework.scheduling.quartz.SchedulerFactoryBean" >
    	<property name="configLocation" value="classpath:quartz.properties" />
</bean>

 

在启动项目的时候,发现一只报错,Couldn't store job: Unable to serialize JobDataMap for insertion into database because the value of property 'methodInvoker' is not serializable,在网上搜索了好多文章,都是是spring有bug,按照他们提供的方式修改类,依旧报错,于是想到了升级spring的版本,依旧不是使,泪崩了,在于是继续在网上搜索有关quartz分布式相关的文章,看到有一篇文章采用的JobDetailFactoryBean来实现的,于是,我也换成了用这种方式去实现,结果好用了,没有在报不可序列化的错误,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值