是否曾想在JIRA里运行定时任务?为什么在用了JIRA后还需要定时任务?在之前的一个帖子里,我们已经介绍过如何编写服务。尽管我们介绍了它的所有优点,但是服务器还是有个缺点的。它必须在JIRA重启才能启动,在之后才能定期运行。如果你有一个任务,它需要做繁重的内存密集操作,当你在一天中午重启了JIRA后,你会突然发现你的示例性能受到损害!如果它被计划为每24小时运行一次,你会发现它总是在每天的中午运行,直到你下次重启JIRA。
JIRA中的计划任务是一个可以确保所有类似操作会在恰当时间运行的好方法,比如在凌晨。在本贴中,我们会写一个实际的示例,看看实现它是多么容易。
新建一个定时任务的第一步,是写一个java类并实现 Quartz Job接口。JIRA内部使用 Quartz 来定时运行它的任务,因此JIRA自带 Quartz。我们的定时任务只是在控制台打印一行信息,因此,我们编写的JAVA类向下面这样简单:
1 package com.jtricks; 2 import java.util.Date; 3 import org.quartz.Job; 4 import org.quartz.JobExecutionContext; 5 import org.quartz.JobExecutionException; 6 7 public class JTricksScheduledJob implements Job{ 8 public void execute(JobExecutionContext context) throws JobExecutionException { 9 System.out.println("Running the job at "+(new Date()).toString()); 10 } 11 } |
正如你所见,我们在做这里需要做的就是实现 execute 方法。不管如何,我们在这个方法中做的,既可以如上述代码只有一行代码这样简单,也可以像启动核爆炸一样复杂!
下一步是让JIRA知道我们已经写好的新任务,并为它设置个定时。为此,我们首先需要新建一个jar文件,将它放到JIRA安装目录的WEB-INF/lib文件夹下。注意它并不是一个 v2 插件,因此将它放到 JIRA_HOME/plugins/installed-plugins路径下是无法正常工作的。
JIRA存储定时任务的信息在WEB-INF/classes路径下的 scheduler-config.xml 文件中。我们需要在这个文件中定义新任务的时间表。 首先我们需要在jobs标签下定义一个job,如下:
<job name="JTricksJob" class="com.jtricks.JTricksScheduledJob" />
然后,我们需要添加一个触发器来运行 JTricksJob。在这一步,我们通过定义cron表达式实现在指定的时间内运行job。
<trigger name="JTricksJobTrigger" job="JTricksJob" type="cron"> <expression>0 0/2 * * * ?</expression><!-- run every 2 minutes --> </trigger> |
上边这个定时器将每两分钟执行一次job。更多编写cron表达式的细节,可以查看 here。这样一来,一个计划任务就准备好了。现在我们唯一需要做的就是重启JIRA。
JIRA重启之后,就可以在 Administration > Scheduler Details 页面中看到新创建的任务了。如下图,我们也可以在这个页面确认下任务的下次触发时间。
当任务运行时,你将会看到控制台输出如下信息:
这比我们想象的简单,不是吗?附件是我们刚才看到的简单代码和修改后的 scheduler-config.xml。去享受这个新技能吧!
上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。