crontriggerbean配置详解,看完这篇再也不出错!

吉云

今天搞搞定时任务,用到CronTriggerBean,踩不少坑,还好都弄明白。现在就来跟大伙儿分享一下我的实践过程。

我是想把cron表达式直接写在代码里的,简单粗暴嘛但是后来一想,这样不够灵活,万一哪天要改个时间,还得重新编译打包,多麻烦。

于是我就琢磨着,能不能把cron表达式存到数据库里,然后让定时任务去读数据库。这样,以后要改时间,直接在数据库里改就行,方便多。搜一圈资料,发现CronTriggerBean这玩意儿正好能满足我的需求。

crontriggerbean配置详解,看完这篇再也不出错!

得有个地方放定时任务的具体逻辑?我新建一个类,就叫MyTask,里面写个execute方法,这里面就是我想要定时执行的代码。


public class MyTask {

public void execute() {

// 这里写你想要定时执行的代码

crontriggerbean配置详解,看完这篇再也不出错!

*("定时任务执行!");

就是配置CronTriggerBean。我用的是XML配置方式,在Spring的配置文件里加这么一段:

crontriggerbean配置详解,看完这篇再也不出错!


<bean id="myTask" class="*" />

<bean id="jobDetail" class="*.*">

<property name="targetObject" ref="myTask" />

<property name="targetMethod" value="execute" />

crontriggerbean配置详解,看完这篇再也不出错!

</bean>

<bean id="cronTrigger" class="*.*">

<property name="jobDetail" ref="jobDetail" />

<property name="cronExpression" value="0/5 ?" /> <!-- 这里先随便写一个,后面从数据库读 -->

</bean>

<bean class="*.*">

crontriggerbean配置详解,看完这篇再也不出错!

<property name="triggers">

<list>

<ref bean="cronTrigger" />

</list>

</property>

</bean>

crontriggerbean配置详解,看完这篇再也不出错!

  • myTask:就是上面写的那个类,用来放具体任务逻辑的。
  • jobDetail:这玩意儿是用来告诉Spring,我的任务在哪里,要执行哪个方法。targetObject指向myTasktargetMethod写上execute方法名。
  • cronTrigger:这就是主角CronTriggerBeanjobDetail属性指向上面配置的jobDetailcronExpression属性就是cron表达式。这里我先随便写个"0/5 ?",表示每5秒执行一次。
  • SchedulerFactoryBean:把trigger注册一下。

然后,我写个service,用来从数据库里读取cron表达式:


public class MyService {

public String getCronExpressionFromDB() {

// 这里从数据库里读取cron表达式

// ...

return "0 0 12 ?"; // 假设从数据库读到的是每天中午12点执行

我在MyTask类里加个方法,用来更新CronTriggerBean的cron表达式:


import *.*;

public class MyTask {

private CronTriggerBean cronTriggerBean;

public void setCronTriggerBean(CronTriggerBean cronTriggerBean) {

* = cronTriggerBean;

public void execute() {

// 这里写你想要定时执行的代码

*("定时任务执行!");

//更新表达式

public void refreshCronExpression() {

String cronExpression = // 从数据库读取cron表达式

try {

*(cronExpression);

Scheduler scheduler = *();

*(*(), *(), cronTriggerBean);

} catch (Exception e) {

//异常处理

在配置文件里面把cronTriggerBean注入进去就完成。


<bean id="myTask" class="*">

<property name="cronTriggerBean" ref="cronTrigger"/>

</bean>

大功告成!我的定时任务就可以从数据库里读取cron表达式,想啥时候执行,直接改数据库就行,再也不用重新编译打包,美滋滋!

免责声明:由于无法甄别是否为投稿用户创作以及文章的准确性,本站尊重并保护知识产权,根据《信息网络传播权保护条例》,如我们转载的作品侵犯了您的权利,请您通知我们,请将本侵权页面网址发送邮件到qingge@88.com,深感抱歉,我们会做删除处理。

目录[+]