Java之旅--定时任务(Timer、Quartz、Spri

在Java中,实现定时任务有多种方式,本文介绍4种,Timer和TimerTask、Spring、QuartZ、Linux Cron。

以上4种实现定时任务的方式,Timer是最简单的,不需要任何框架,仅仅JDK就可以,缺点是仅仅是个时间间隔的定时器,调度简单;Spring和QuartZ都支持cron,功能都很强大,Spring的优点是稍微简单一点,QuartZ的优点是没有Spring也可使用;Linux Cron是个操作系统级别的定时任务,适用于所有操作系统支持的语言,缺点是精度只能到达分钟级别。

这其实也是一种非常普遍的实现定时任务的方式,实际是操作系统的定时任务。Linux Cron只能到达分钟级,到不了秒级别。

一般我们是设置定时执行一个sh脚本,在脚本里面写一些控制代码,例如,有如下的脚本:

3,33 /usr/local/log_parser/run_log_parser.sh &

run_log_parser.sh的内容大致如下:

#!/bin/sh

log_parser_dir=/usr/local/log_parser
tmp_file=/usr/local/run_parser_tmp.txt
parser_log=/usr/local/access_parser.log
tmpDir=/data/applogs/access_logs_bp

date >> "$parser_log"

if [! -f "$tmp_file"]; then
        echo "访问日志解析正在进行,尚未完成" >> "$parser_log"
        echo "" >> "$parser_log"
else
        echo "开始解析访问日志" >> "$parser_log"
        touch "$tmp_file"
        cd "$log_parser_dir"
        python access_log_parser.py >> "$parser_log"
        rm "$tmp_file"
        echo "解析访问日志完成" >> "$parser_log"
        echo "" >> "$parser_log"
        cd "$tmpDir"
        gzip gzip WEB0*
        mv *.gz gz/
        echo "压缩备份日志及移动到压缩目录成功" >> "$parser_log"
fi
文章导航