在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