DotNetCore 定时服务 HangFire

最近在写一个Asp.net core 的项目,其中有用到定时任务,一开始准备要用Quartz.net。毕竟在Java中和.net framework中都表现突出。

但是看了一下Quartz.net 关于Asp.net core 的文档之后决定换一个定时任务框架,于是我选择了HangFire。

开发工具:visual studio code

环境:.net core 2.0

①创建一个asp.net core mvc项目:在vs code打开一个空文件夹,然后用Ctrl+、(或点击上方的 查看集成终端)打开 终端 输入:dotnet new mvc

②安装HangFire 在 终端 输入:dotnet add package HangFire

③打开Startup文件,导入依赖项:using HangFire;

注意:

这个定时框架需要使用数据库,如果你用的是mssql 就不要单独引数据库的包了,否则需要单独添加,比如dotnet add package Hangfire.Pro.Redis;

④在ConfigureServices中添加数据库引擎

publicvoidConfigureServices(IServiceCollection services)

        {

            services.AddHangfire(r =>r.UseSqlServerStorage(@"Server=(localdb)\MSSQLLocalDB; Database=HangFire; Trusted\_Connection=True;"));

            services.AddMvc();

        }

⑤然后在Configure启动服务 启动框架 添加定时任务

即添加

app.UseHangfireServer();

app.UseHangfireDashboard();

RecurringJob.AddOrUpdate();

publicvoidConfigure(IApplicationBuilder app, IHostingEnvironment env)

        {

            if (env.IsDevelopment())

            {

                app.UseDeveloperExceptionPage();

            }

            else

            {

                app.UseExceptionHandler("/Home/Error");

            }

            app.UseHangfireServer();

            app.UseHangfireDashboard();

            //定时任务

            RecurringJob.AddOrUpdate(() =>newCommon.Weather(), Cron.Daily);

            app.UseStaticFiles();

            app.UseMvc(routes =>;

            {

                routes.MapRoute(

                    name: "default",

                    template: "{controller=Home}/{action=Index}/{id?}");

            });

        }
注释:

Common是我的一个工具类,Weather是我需要定时执行的方法;

Cron.Daily表是每天执行一次;

另外定时任务执行方式有很多种,添加、延迟、重复等等 Cron表达式也多种多样

任务执行方式: http://docs.hangfire.io/en/latest/quick-start.html

Cron表达式: https://en.wikipedia.org/wiki/Cron#CRON_expression

如果用vs code的话在调试之前千万不要执行 dotnet restore或dotnet build

posted @ 2018-01-29 17:04  HOYU_Z  阅读(677)  评论(1编辑  收藏  举报