下面主要记录下自己在研究若依中定时任务时遇到的问题和过程。
若依中的定时任务使用的是Quartz。我们先了解几个概念在其中的:
再来看个简单的小段代码:
这里我要说的是,调度器是要启动也就是start才能用的。 这里的1和2 记得没错的话,也可以把2放在先。 就是按好理解的方式先启动,后把要做的job注册进去。
接着回到ruoyi-vue代码。
首先我在代码中没看到调度器启动的start() 这个方法的调用,只看到在
上面这个service里直接开始把job注册进去了(这里涉及到似乎改相关数据需要重启项目才能纠正定时任务的问题,暂不讨论,咱们先讨论quartz启动问题)。也就是说不符合我们网络demo小代码使用quartz的过程。后来各种找,原来在项目启动时quartz自动按标准模式start起来。
我好奇了,为什么demo那些都决口不提自动start问题呢,(后来我也没明白,哎)。
先不管了于是我后来新建了个springboot 2.5.15项目(没有子模块那种),然后引入
<dependency> <groupId>org.quartz-scheduler</groupId> <artifactId>quartz</artifactId> <version>2.3.2</version> <exclusions> <exclusion> <groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> </exclusion> </exclusions> </dependency>
上面这个引用是和ruoyi-vue一样的。
结果启动项目是,死活在控制台看不到quartz启动的日志,也就是说没用。
我蒙蔽了,为何ruoyi可以。
而且这个新项目中的service,还不能装配调度器。如下图。这个我也是参考ruoyi的啊。天,,,
后来我又一大顿找,搜索。发现了这个
<!-- <dependency>-->
<!-- <groupId>org.springframework.boot</groupId>-->
<!-- <artifactId>spring-boot-starter-quartz</artifactId>-->
<!-- </dependency>-->
网上有说这个才是专门给springboot用的。
我先试试吧。好家伙居然换这个可以了。
可是原来的-------
<dependency> <groupId>org.quartz-scheduler</groupId>
<artifactId>quartz</artifactId>
<version>2.3.2</version>
<exclusions>
<exclusion>
<groupId>com.mchange</groupId> <artifactId>c3p0</artifactId> </exclusion>
</exclusions>
</dependency>
怎么就不行了,然后又各种搜索倒腾怎么手动装配,以及手动启动调度器。这里代码先忽略了,应该比较容易百度到。虽然乱折腾能解决,可是那就和ruoyi里头的不一样了啊,凭什么ruoyi-vue可以,我的不行,我还得手动装配启动,不爽,奔溃。
经过无数次的瞎搞,发现一个问题难道这个引用还和子模块有关??? ,被迫无奈搞个子模块项目吧,我去。
如上图,也不报错了,装配也正常了,引用和ruoiy-vue一样。主模块还是springboot项目。
定时任务终于也会自己start了。什么鬼。为什么会这样,总结:放在子模块引,就能用quartz
,而且改为spring-boot-starter-quartz 也能用。如果不放在子模块就只能用spring-boot-starter-quartz。
好家伙。我也不知道为何会这样,目前总结出来就是这样。搞了几天。。。。 后续再研究定时任务其他细节。