最近开始要负责分布式事务调度这块儿的实现,原来想想就是加个分布式锁,很简单,但是看了quartz和elastic-job的代码,貌似不是那么简单,所以还是老样子,学习借鉴下。
首先quartz的文档看一遍,有个大概的了解。
然后给自己一个小目标:把它跑起来。
首先按照教程,写个最简单的例子job trigger schduler咱都得有。
然后,就是连接数据库,简单的在quartz.properties里配置下即可。
# 定时任务信息
org.quartz.scheduler.instanceName = NooshScheduler
org.quartz.scheduler.instanceId = AUTO
org.quartz.threadPool.threadCount = 3
# 打开集群
org.quartz.jobStore.isClustered=true
# 数据库
org.quartz.jobStore.class:org.quartz.impl.jdbcjobstore.JobStoreTX
org.quartz.jobStore.driverDelegateClass = org.quartz.impl.jdbcjobstore.StdJDBCDelegate
org.quartz.jobStore.dataSource=nooshQuartzDB
org.quartz.dataSource.nooshQuartzDB.driver=org.h2.Driver
org.quartz.dataSource.nooshQuartzDB.URL=jdbc:h2:~/testdb
org.quartz.dataSource.nooshQuartzDB.user=sa
org.quartz.dataSource.nooshQuartzDB.password=
这里H2数据有点小插曲:
1. web无法再本地建数据库,到安装目录下执行命令建一个就行了
D:\dev\softpack\h2\bin> java -cp h2-1.4.199.jar org.h2.tools.Shell
2. 数据库文件被锁住,app连不上,停止本地的H2服务,使用自己app连就行了,二选一
好的,一个节点,一个数据库,小目标达成。
如何运行多个节点呢?
1. 打成jar包来运行。
maven assembly plugin了解一下,或者直接用maven的jar,dependency plugin把jar包打好,再手动写个manifest添加Class-Path和Main-Class,用jar命令把它两打包到一起,了解一下就行。
2. 我们还是直接把项目改装成sring-boot项目,分别换两个端口起起来就行了,真香。
3. 有条件的再加个docker文件,直接部署到docker里。
项目跑起来了,明天就去撸quartz源码,改造成自己想要的样子。