定时任务,简单的说就是雇个免费钟点工,让他在特定时间去自动帮你完成某些你已经分配好了的任务。在哪个时间段启动定时任务,让它自动的去帮忙处理些事情,这些都可以靠自己去设置和定义,和JavaScript中的定时器类似但却有趣的多。那么,定时任务是怎么设置的呢?
首先我们需要用到一个插件:FluentScheduler,先将它放入自己的项目文件中然后在项目资源管理器中点击“引用”项,右键打开菜单,点击添加引用,接着就会弹出文件引用管理器,在管理器的右下角点击浏览,选择到刚才放入项目文件中的定时任务插件,这样便成功将插件引用成功,完成第一步操作。
紧接着,便要给成功引入的定时任务一个“家(夹)”。需要在项目中创建文件夹专门用于存放定时任务的各个类模块。定时任务一般分为三个模块:执行(TestJob) - 管理(MyRegistry) - 清理(ClearJob),我们要在每个模块设置相应的功能,最后组合成一个完整的定时任务。
1.执行(TestJob)模块:在此页面中可以设置任务具体要做什么,在什么位置开始执行任务。
示例:当定时任务执行后,往G:/log.txt文件内输出当前的时间,如果G:/log.txt文件不存在就创建它:
(1)定义string类型变量获取G/log.txt的路径
string path = “G:/log.txt”;
(2)获取文件,若文件不存在则通过StreamWriter方法创建
TextWriter textWriter = new StreamWriter(path, true, new UTF8Encoding(false));
(3)往文件内打印当前时间
textWriter.WriteLine(DateTime.Now.ToString(“yyyy-MM-dd HH:mm:ss”));
textWriter.Close();
将定义好的任务写入Execute()中,任务的执行模块便成功设置完成。
2.管理(MyRegistry)模块,在该页面中则是设置任务开始执行的时间,以及任务执行的间隔时间,隔多久运行一次任务,这些都是要通过插件内封装好的方法来进行定义才可以生效的。
Schedule《ClearJob》().ToRunNow().AndEvery(10).Seconds();
Schedule《ClearJob》()方法:在项目启动后,立即执行绑定的计划任务,并根据指定好的时间间隔执行计划任务,指定一个时间间隔运行,根据自己需求,可以是秒、分、时、天、月、年等。将该方法写入MyRegistry()类中,指定每隔(10)秒就往指定的文件中打印当前的时间。任务执行时间&间隔时间定义完成。
3.清理(ClearJob)模块,该模块可以根据项目的需求来使用,一般用于按时清理项目中的某些临时文件&临时文件夹,或是一些无用的缓存数据,只要获取待清理的文件&文件夹路径,再设置号具体要删除的数据,通过管理模块中定义好的任务执行时间来达成按时清理无用或垃圾文件的效果,是个十分方便的功能。
当然,清理文件夹中的无用文件一般是将任务执行的时间定义到每天的晚上三点到五点左右的那个时间段,那个时候一般大家都在休息中,尽量避开人们的工作时间进行对无用文件的清除,间隔时间也不能是每十秒清除一次,十秒只是用于测试的,可以较快看到结果。
(1)获取项目的运行目录 + Document\Temp来获取临时目录的绝对路径
string str = AppDomain.CurrentDomain.BaseDirectory + “Document\Temp\”;
(2)判断是否存在Temp临时目录
if (Directory.Exists(str))
{ //存在
//删除子文件夹
string[] directories = Directory.GetDirectories(str);
foreach (string directory in directories)
{
Directory.Delete(directory, true);
}
//删除子文件
string[] files = Directory.GetFiles(str);
foreach (string file in files)
{
System.IO.File.Delete(file);
}
}
else
{ //不存在,则创建临时文件夹
Directory.CreateDirectory(str);
}
三个模块全部定义完成后,最后要做的就是在项目的数据入口页面中进行对定时任务的注册。然而,项目入口在什么地方呢? 在一开始创建MVC项目时系统便自动帮你创建好的源文件:Global.asax,如下图:
找到项目入口文件后打开,注册定时任务:JobManager.Initialize(new MyRegistry());,一句代码便可以完成注册,其余两句是项目入口页原本就有的。
完成以上操作,定时任务便设置完成。