【问题标题】:Quartz.net for newbies [closed]适合新手的 Quartz.net [关闭]
【发布时间】:2009-01-22 11:29:23
【问题描述】:

什么是quartz.net,如何开始使用呢?

【问题讨论】:

    标签: .net asp.net quartz.net


    【解决方案1】:

    建议您从 http://quartznet.sourceforge.net/tutorial/index.html 的 Quartz.Net 教程开始

    【讨论】:

      【解决方案2】:

      您可以查看文件夹 src\Quartz.Examples 中的示例。

      【讨论】:

        【解决方案3】:

        你需要首先想到几点,如果要使用内存中的Quartz或存储在数据库中,它会启动一个服务器等。 之后你必须创建一个类来管理你的日程安排和另一个包含你想要运行的作业,我说的是一个简单的例子。我将在以下场景中演示如何执行此操作: 用于存储数据的 Sqlite,一个带有日志的 Job 类,以及带有 Log 的所有其他内容。并将在每天上午 10:30 运行。

        你的 web.config

        <add key="quartz.scheduler.instanceName" value="ServerScheduler" />
        <add key="quartz.threadPool.type" value="Quartz.Simpl.SimpleThreadPool, Quartz" />
        <add key="quartz.threadPool.threadCount" value="10" />
        <add key="quartz.threadPool.threadPriority" value="2" />
        
        <add key="quartz.jobStore.type" value="Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" />
        
        <add key="quartz.jobStore.dataSource" value="default" />
        <add key="quartz.dataSource.default.connectionString" value="Data Source=yourdb.db;Version=3;Foreign Keys=ON;" />
        <add key="quartz.jobStore.tablePrefix" value="QRTZ_" />
        <add key="quartz.jobStore.clustered" value="false" />
        <add key="quartz.jobStore.lockHandler.type" value="Quartz.Impl.AdoJobStore.UpdateLockRowSemaphore, Quartz" />
        <add key="quartz.jobStore.driverDelegateType" value="Quartz.Impl.AdoJobStore.StdAdoDelegate, Quartz" />
        <add key="quartz.dataSource.default.provider" value="SQLite-1094" />
        <add key="quartz.jobStore.useProperties" value="true" />
        <add key="quartz.scheduler.exporter.type" value="Quartz.Simpl.RemotingSchedulerExporter, Quartz" />
        <add key="quartz.scheduler.exporter.port" value="555" />
        <add key="quartz.scheduler.exporter.bindName" value="QuartzScheduler" />
        <add key="quartz.scheduler.exporter.channelType" value="tcp" />
        

        创建一个名为 Schedule.cs 的类:

        public static class Schedule
        {
        
            private static readonly ILog logger = LogManager.GetLogger(typeof(Schedule));
        
            public static ITrigger BuildTrigger(int hour, int minute)
            {
        
        
                var trigger = TriggerBuilder.Create()
                                            .StartNow()
                                             .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour,minute))
                                            .Build();
                return trigger;
            }
        
        
        
        
            public static IScheduler InicializarScheduler()
            {
        
        
                var scheduleMigracao = Schedule.GetScheduler();
        
                if (!scheduleMigracao.IsStarted)
                    scheduleMigracao.Start();
        
                logger.Info("Scheduler started successfully");
        
                return scheduleMigracao;
            }
        
            public static IJobDetail BuildJogDetail<T>(string WorkFlowId, string Group) where T : IJob
            {
                return JobBuilder.Create<T>()
                       .WithIdentity(WorkFlowId, Group)
                       .RequestRecovery()
                       .Build();
            }
        
            private static IScheduler GetScheduler()
            {
                try
                {
        
                    IScheduler scheduler = SchedulerRepository.Instance.Lookup("DefaultQuartzScheduler");
                    if (scheduler == null)
                    {
                        var factoryScheduler = new StdSchedulerFactory();
        
                        return factoryScheduler.GetScheduler();
                    }
                    else
                    {
                        return scheduler;
                    }
                }
                catch (Exception ex)
                {
                    logger.Error("Server initialization failed:" + ex.Message, ex);
                    throw;
                }
            }
        }
        

        创建一个名为 TestJob.cs 的类

        public class TestJob : IInterruptableJob
        {
            private static readonly ILog Log = LogManager.GetLogger(typeof(TestJob));
        
            public void Interrupt()
            {
        
            }
        
            public void Execute(IJobExecutionContext context)
            {
                try
                {
        
                    Log.DebugFormat("{0}****{0}Job {1} Start @ {2} next scheduled for {3}{0}***{0}",
                                                                            Environment.NewLine,
                                                                            context.JobDetail.Key,
                                                                            context.FireTimeUtc.Value.ToString("r"),
                                                                            context.NextFireTimeUtc.Value.ToString("r"));
        
        
                   //implement your logic
        
        
                    Log.DebugFormat("{0}****{0}Job {1} executed with sucess at  @ {2}",
                                                                            Environment.NewLine,
                                                                            context.JobDetail.Key,
                                                                            context.FireTimeUtc.Value.ToString("r"));
        
                }
                catch (Exception ex)
                {
        
                    Log.DebugFormat("{0}***{0}Failed: {1}{0}***{0}", Environment.NewLine, ex.Message);
                }
            }
        }
        

        在您的 Global.asax 位置:

         public class Global : System.Web.HttpApplication
        {
            private static void BuildingQuartzMetadataSqLite1090()
            {
                var metaData = new DbMetadata();
                metaData.AssemblyName = "System.Data.SQLite, Version = 1.0.94.0,Culture=neutral, PublicKeyToken=db937bc2d44ff139";
                metaData.BindByName = true;
                metaData.CommandBuilderType = typeof(System.Data.SQLite.SQLiteCommandBuilder);
                metaData.CommandType = typeof(System.Data.SQLite.SQLiteCommand);
                metaData.ConnectionType = typeof(System.Data.SQLite.SQLiteConnection);
                metaData.ExceptionType = typeof(System.Data.SQLite.SQLiteException);
                metaData.ParameterDbType = typeof(System.Data.SQLite.TypeAffinity);
                metaData.ParameterDbTypePropertyName = "DbType";
                metaData.ParameterNamePrefix = "@";
                metaData.ParameterType = typeof(System.Data.SQLite.SQLiteParameter);
                metaData.UseParameterNamePrefixInParameterCollection = true;
        
                DbProvider.RegisterDbMetadata("SQLite-1094",metaData);
            }
        
            protected void Application_Start(object sender, EventArgs e)
            {
                  BuildingQuartzMetadataSqLite1090();
                   Schedule.InicializarScheduler();
                   Schedule.ScheduleJob(Schedule.BuildJogDetail<TestJob>("TestJob","GrupoTest"), Schedule.BuildTrigger(10, 30));
            }
        }
        

        有什么问题可以问

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-19
          • 1970-01-01
          • 2023-04-05
          • 1970-01-01
          • 2012-06-05
          • 1970-01-01
          • 2022-07-16
          • 1970-01-01
          相关资源
          最近更新 更多