public void ConfigureServices(IServiceCollection services) { //var environment = ""; //var hostBuilder = new HostBuilder() // .UseContentRoot(Directory.GetCurrentDirectory()) // .ConfigureAppConfiguration((hostingContext, config) => // { // environment = hostingContext.HostingEnvironment.EnvironmentName; // }); var configBuilder = new ConfigurationBuilder() .SetBasePath(Directory.GetCurrentDirectory()) .AddJsonFile("appsettings.json", optional: true, reloadOnChange: false); //if (environment.Length > 0) // configBuilder.AddJsonFile($"appsettings.{environment}.json", optional: false, reloadOnChange: true); //configBuilder.AddEnvironmentVariables(); IConfiguration config = configBuilder.Build(); this._configuration = config; var pollingInterval = 0; try { pollingInterval = this._configuration.GetSection("ScheduleSettings").GetValue <int>("pollingInterval"); } catch (Exception ex) { pollingInterval = 30; } Console.Out.WriteLineAsync($"Polling interval set to {pollingInterval}"); services.AddQuartz(q => { // construct a scheduler factory StdSchedulerFactory factory = new StdSchedulerFactory(); // get a scheduler IScheduler scheduler = factory.GetScheduler().GetAwaiter().GetResult(); scheduler.Start(); // base quartz scheduler, job and trigger configuration IJobDetail job = JobBuilder.Create <SampleJob>() .WithIdentity("mySampleJob", "group1") .Build(); // Trigger the job to run now, and then every [pollingInterval] seconds ITrigger trigger = TriggerBuilder.Create() .WithIdentity("mySampleTrigger1", "group1") .StartNow() .WithSimpleSchedule(x => x .WithIntervalInSeconds(pollingInterval) .RepeatForever()) .Build(); scheduler.ScheduleJob(job, trigger); // Schedule the daily lunch break. IJobDetail lunchJob = JobBuilder.Create <LunchJob>() .WithIdentity("mySampleLunchJob", "group1") .Build(); ITrigger cronTriggerLunch = TriggerBuilder.Create() .WithIdentity("mySampleTrigger2", "group1") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(2, 00)) .ForJob(lunchJob) .Build(); scheduler.ScheduleJob(lunchJob, cronTriggerLunch); // Schedule monthly staff pay transfer. IJobDetail payTransferJob = JobBuilder.Create <TransferPayJob>() .WithIdentity("mySamplePayTransferJob", "group1") .Build(); ITrigger cronTriggerTheyGetPaid = TriggerBuilder.Create() .WithIdentity("mySampleTrigger3", "group1") .WithCronSchedule("0 1 2 4 * ? ") .ForJob(payTransferJob) .Build(); scheduler.ScheduleJob(payTransferJob, cronTriggerTheyGetPaid); }); // ASP.NET Core hosting services.AddQuartzServer(options => { // when shutting down we want jobs to complete gracefully options.WaitForJobsToComplete = true; }); services.AddHostedService <TimedHostedService>(); }
public static void Register() { var parameter = Parameter.Get(); if (string.IsNullOrWhiteSpace(parameter.EodScheduleUTC)) { return; } var factory = new StdSchedulerFactory(); var scheduler = factory.GetScheduler(); scheduler.Start(); string backupScheduleUtc = parameter.EodScheduleUTC; var scheduleData = backupScheduleUtc.Split(','); int hour = 0; int minute = 0; if (scheduleData.Length.Equals(2)) { hour = scheduleData[0].To <int>(); minute = scheduleData[1].To <int>(); } var job = JobBuilder.Create <EndOfDayJob>().WithIdentity("DayEndTask", "Reminders").Build(); var trigger = TriggerBuilder.Create().WithIdentity("DayEndTask", "Reminders").WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour, minute).InTimeZone(TimeZoneInfo.Utc)).Build(); scheduler.ScheduleJob(job, trigger); }
// This method gets called by the runtime. Use this method to add services to the container. public void ConfigureServices(IServiceCollection services) { services.AddLogging(builder => { builder.AddFile(opts => opts.LogDirectory = LogFolderPath); }); services.AddOptions(); services.AddHealthChecks().AddCheck <DasBlogHealthChecks>("health_check"); services.AddMemoryCache(); services.Configure <TimeZoneProviderOptions>(Configuration); services.Configure <SiteConfig>(Configuration); services.Configure <MetaTags>(Configuration); services.AddSingleton <AppVersionInfo>(); services.Configure <ConfigFilePathsDataOption>(options => { options.SiteConfigFilePath = Path.Combine(hostingEnvironment.ContentRootPath, SiteConfigPath); options.MetaConfigFilePath = Path.Combine(hostingEnvironment.ContentRootPath, MetaConfigPath); options.SecurityConfigFilePath = Path.Combine(hostingEnvironment.ContentRootPath, SiteSecurityConfigPath); options.IISUrlRewriteFilePath = Path.Combine(hostingEnvironment.ContentRootPath, IISUrlRewriteConfigPath); options.ThemesFolder = ThemeFolderPath; options.BinaryFolder = BinariesPath; options.BinaryUrlRelative = string.Format("{0}/", BinariesUrlRelativePath); }); services.Configure <ActivityRepoOptions>(options => options.Path = LogFolderPath); //Important if you're using Azure, hosting on Nginx, or behind any reverse proxy services.Configure <ForwardedHeadersOptions>(options => { options.ForwardedHeaders = ForwardedHeaders.All; options.AllowedHosts = Configuration.GetValue <string>("AllowedHosts")?.Split(';').ToList <string>(); }); // Add identity types services .AddIdentity <DasBlogUser, DasBlogRole>() .AddDefaultTokenProviders(); services.Configure <IdentityOptions>(options => { // Password settings options.Password.RequireDigit = true; options.Password.RequiredLength = 8; options.Password.RequireNonAlphanumeric = false; options.Password.RequireUppercase = true; options.Password.RequireLowercase = false; options.Password.RequiredUniqueChars = 6; // Lockout settings options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(30); options.Lockout.MaxFailedAccessAttempts = 10; options.Lockout.AllowedForNewUsers = true; // User settings options.User.RequireUniqueEmail = true; }); services.ConfigureApplicationCookie(options => { options.LoginPath = "/account/login"; // If the LoginPath is not set here, ASP.NET Core will default to /Account/Login options.LogoutPath = "/account/logout"; // If the LogoutPath is not set here, ASP.NET Core will default to /Account/Logout options.AccessDeniedPath = "/account/accessdenied"; // If the AccessDeniedPath is not set here, ASP.NET Core will default to /Account/AccessDenied options.SlidingExpiration = true; options.ExpireTimeSpan = TimeSpan.FromSeconds(10000); options.Cookie = new CookieBuilder { HttpOnly = true }; }); services.AddResponseCaching(); services.Configure <RazorViewEngineOptions>(rveo => { rveo.ViewLocationExpanders.Add(new DasBlogLocationExpander(Configuration.GetSection("Theme").Value)); }); services.AddSession(options => { options.IdleTimeout = TimeSpan.FromSeconds(1000); }); services .AddHttpContextAccessor(); services .AddTransient <IDasBlogSettings, DasBlogSettings>() .AddTransient <IUserStore <DasBlogUser>, DasBlogUserStore>() .AddTransient <IRoleStore <DasBlogRole>, DasBlogUserRoleStore>() .AddTransient <IPrincipal>(provider => provider.GetService <IHttpContextAccessor>().HttpContext.User) .AddTransient <ISiteRepairer, SiteRepairer>(); services.AddScoped <IRichEditBuilder>(SelectRichEditor) .AddScoped <IBlogPostViewModelCreator, BlogPostViewModelCreator>(); services .AddSingleton(hostingEnvironment.ContentRootFileProvider) .AddSingleton <IBlogManager, BlogManager>() .AddSingleton <IArchiveManager, ArchiveManager>() .AddSingleton <ICategoryManager, CategoryManager>() .AddSingleton <ISiteSecurityManager, SiteSecurityManager>() .AddSingleton <IXmlRpcManager, XmlRpcManager>() .AddSingleton <ISiteManager, SiteManager>() .AddSingleton <IHttpContextAccessor, HttpContextAccessor>() .AddSingleton <IFileSystemBinaryManager, FileSystemBinaryManager>() .AddSingleton <IUserDataRepo, UserDataRepo>() .AddSingleton <ISiteSecurityConfig, SiteSecurityConfig>() .AddSingleton <IUserService, UserService>() .AddSingleton <IActivityService, ActivityService>() .AddSingleton <IActivityRepoFactory, ActivityRepoFactory>() .AddSingleton <IEventLineParser, EventLineParser>() .AddSingleton <ITimeZoneProvider, TimeZoneProvider>() .AddSingleton <ISubscriptionManager, SubscriptionManager>() .AddSingleton <IConfigFileService <MetaTags>, MetaConfigFileService>() .AddSingleton <IConfigFileService <SiteConfig>, SiteConfigFileService>() .AddSingleton <IConfigFileService <SiteSecurityConfigData>, SiteSecurityConfigFileService>(); services .AddAutoMapper((serviceProvider, mapperConfig) => { mapperConfig.AddProfile(new ProfilePost(serviceProvider.GetService <IDasBlogSettings>())); mapperConfig.AddProfile(new ProfileDasBlogUser(serviceProvider.GetService <ISiteSecurityManager>())); mapperConfig.AddProfile(new ProfileSettings()); }) .AddMvc() .AddXmlSerializerFormatters(); services .AddControllersWithViews() .AddRazorRuntimeCompilation(); services.AddRecaptcha(options => { options.SiteKey = RecaptchaSiteKey; options.SecretKey = RecaptchaSecretKey; }); services.Configure <CookiePolicyOptions>(options => { bool.TryParse(Configuration.GetSection("CookieConsentEnabled").Value, out var flag); options.CheckConsentNeeded = context => flag; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddQuartz(q => { q.SchedulerId = "Scheduler-Core"; q.UseMicrosoftDependencyInjectionJobFactory(options => { // if we don't have the job in DI, allow fallback to configure via default constructor options.AllowDefaultConstructor = true; }); q.UseSimpleTypeLoader(); q.UseInMemoryStore(); q.UseDefaultThreadPool(tp => { tp.MaxConcurrency = 10; }); var jobKey = new JobKey("key1", "main-group"); q.AddJob <SiteEmailReport>(j => j .StoreDurably() .WithIdentity(jobKey) .WithDescription("Site report job") ); q.AddTrigger(t => t .WithIdentity("Simple Trigger") .ForJob(jobKey) .StartNow() .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(23, 45)) .WithDescription("my awesome simple trigger") ); }); services.AddQuartzServer(options => { options.WaitForJobsToComplete = true; }); }
public static void Start(IContainer container) { Container = container; var scheduler = container.Resolve <IScheduler>(); scheduler.JobFactory = new AutofacJobFactory(container); scheduler.Start(); // create jobs // comment as per client comment var dailyChoresJob = JobBuilder.Create <CreateDailyChores>() .WithIdentity("dailyChoresJob", "createChore") .Build(); var weeklyChoresJob = JobBuilder.Create <CreateWeeklyChores>() .WithIdentity("weeklyChoresJob", "createChore") .Build(); var makeWeeklyPaymentJob = JobBuilder.Create <MakeWeeklyPayment>() .WithIdentity("makeWeeklyPaymentJob", "createChore") .Build(); var sendWeeklyPaydayStatusJob = JobBuilder.Create <SendWeeklyPaydayStatus>() .WithIdentity("sendWeeklyPaydayStatusJob", "sendStatus") .Build(); var notifyIncompleteMemberEnrollmentJob = JobBuilder.Create <NotifyIncompleteMemberEnrollmentJob>() .WithIdentity("notifyIncompleteMemberEnrollmentJob", "incompleteNewMemberEnrollment") .Build(); var notifyParentHasNotLoggedInJob = JobBuilder.Create <NotifyParentHasNotLoggedInJob>() .WithIdentity("notifyParentHasNotLoggedInJob", "parentHasNotLoggedIn") .Build(); var renewSubscriptionJob = JobBuilder.Create <RenewSubscriptionJob>() .WithIdentity("renewSubscriptionJob", "subscription") .Build(); var notifyChildHasNotLoggedInJob = JobBuilder.Create <NotifyChildHasNotLoggedInJob>() .WithIdentity("notifyChildHasNotLoggedInJob", "childHasNotLoggedIn") .Build(); var notifyNoChoreCompletedJob = JobBuilder.Create <NotifyNoChoreCompletedJob>() .WithIdentity("notifyNoChoreCompletedJob", "noChoreCompleted") .Build(); var notifyContinuousChildActivityJob = JobBuilder.Create <NotifyContinuousChildActivityJob>() .WithIdentity("notifyContinuousChildActivityJob", "continuousChildActivity") .Build(); var notifySubscriptionRenewalJob = JobBuilder.Create <NotifySubscriptionRenewalJob>() .WithIdentity("notifySubscriptionRenewalJob", "subscription") .Build(); var remindSMSApprovalJob = JobBuilder.Create <RemindSMSApprovalJob>() .WithIdentity("remindSMSApprovalJob", "reminder") .Build(); var cancelNotRespondedSMSJob = JobBuilder.Create <CancelNotRespondedSMSJob>() .WithIdentity("cancelNotRespondedSMSJob", "reminder") .Build(); var remindChorePaymentApprovalJob = JobBuilder.Create <RemindChorePaymentJob>() .WithIdentity("remindChorePaymentApprovalJob", "reminder") .Build(); // Azure Service Bus Job var coreproMessageJob = JobBuilder.Create <CoreProMessageJob>() .WithIdentity("coreproMessageJob", "notification") .Build(); var cancelPandingPaydayRequest = JobBuilder.Create <CancelPandingPaydayRequest>() .WithIdentity("cancelPandingPaydayRequest", "cancelChore") .Build(); //create triggers // comment as per client comment var dailyChoresTrigger = TriggerBuilder.Create() .WithIdentity("dailyChoresTrigger", "createChore") .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(1, 0, DayOfWeek.Sunday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("dailyChoresJob", "createChore") .Build(); var weeklyChoresTrigger = TriggerBuilder.Create() .WithIdentity("weeklyChoresTrigger", "createChore") .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(1, 30, DayOfWeek.Sunday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("weeklyChoresJob", "createChore") .Build(); var notifyIncompleteNewMemberEnrollmentTrigger = TriggerBuilder.Create() .WithIdentity("notifyIncompleteNewMemberEnrollmentTrigger", "incompleteNewMemberEnrollment") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(2, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("notifyIncompleteMemberEnrollmentJob", "incompleteNewMemberEnrollment") .Build(); var notifyParentHasNotLoggedInTrigger = TriggerBuilder.Create() .WithIdentity("notifyParentHasNotLoggedInTrigger", "parentHasNotLoggedIn") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(2, 30).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("notifyParentHasNotLoggedInJob", "parentHasNotLoggedIn") .Build(); var notifyChildHasNotLoggedInTrigger = TriggerBuilder.Create() .WithIdentity("notifyChildHasNotLoggedInTrigger", "childHasNotLoggedIn") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(3, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("notifyChildHasNotLoggedInJob", "childHasNotLoggedIn") .Build(); var notifyNoChoreCompletedTrigger = TriggerBuilder.Create() .WithIdentity("notifyNoChoreCompletedTrigger", "noChoreCompleted") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(3, 30).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("notifyNoChoreCompletedJob", "noChoreCompleted") .Build(); var notifyContinuousChildActivityTrigger = TriggerBuilder.Create() .WithIdentity("notifyContinuousChildActivityTrigger", "continuousChildActivity") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(4, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("notifyContinuousChildActivityJob", "continuousChildActivity") .Build(); var notifySubscriptionRenewalTrigger = TriggerBuilder.Create() .WithIdentity("notifySubscriptionRenewalTrigger", "subscription") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(4, 30).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("notifySubscriptionRenewalJob", "subscription") .Build(); // Send weekly payday notification trigger - at 10AM var sendWeeklyPaydayStatusTrigger = TriggerBuilder.Create() .WithIdentity("sendWeeklyPaydayStatusTrigger", "sendStatus") .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(10, 0, DayOfWeek.Thursday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))) .ForJob("sendWeeklyPaydayStatusJob", "sendStatus") .Build(); // Remind chore payment notification trigger -at 12PM var remindChorePaymentApprovalTrigger = TriggerBuilder.Create() .WithIdentity("remindChorePaymentApprovalTrigger", "reminder") .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(12, 0, DayOfWeek.Thursday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))) .ForJob("remindChorePaymentApprovalJob", "reminder") .Build(); // Now it's disapprove chore job after 24 hr of payday SMS - at 10:00 AM Friday var makeWeeklyPaymentTrigger = TriggerBuilder.Create() .WithIdentity("makeWeeklyPaymentTrigger", "createChore") .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(10, 0, DayOfWeek.Friday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))) .ForJob("makeWeeklyPaymentJob", "createChore") .Build(); // renewSubscription trigger - at 11PM var renewSubscriptionTrigger = TriggerBuilder.Create() .WithIdentity("renewSubscriptionTrigger", "subscription") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(23, 0).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("renewSubscriptionJob", "subscription") .Build(); // SMS Approval Jobs - reminder and cancel approval var remindSMSApprovalTrigger = TriggerBuilder.Create() .WithIdentity("remindSMSApprovalTrigger", "reminder") .WithSchedule(CronScheduleBuilder.CronSchedule("0 0 0/1 * * ? *").InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("remindSMSApprovalJob", "reminder") .Build(); var cancelNotRespondedSMSTrigger = TriggerBuilder.Create() .WithIdentity("cancelNotRespondedSMSTrigger", "reminder") .WithSchedule(CronScheduleBuilder.CronSchedule("0 0 0/1 * * ? *").InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("US Mountain Standard Time"))) .ForJob("cancelNotRespondedSMSJob", "reminder") .Build(); // Azure Service Bus Job Trigger var coreproMessageTrigger = TriggerBuilder.Create() .WithIdentity("coreproMessageTrigger", "notification") .WithCronSchedule("0 0/5 * * * ?") //.StartNow() .ForJob("coreproMessageJob", "notification") .Build(); //Cancel chore after 24 hour of cutoff time var cancelChoreTrigger = TriggerBuilder.Create() .WithIdentity("cancelChoreTrigger", "cancelChore") //.WithCronSchedule("0 0/2 * * * ?") .StartNow() .ForJob("cancelPandingPaydayRequest", "cancelChore") .Build(); //Send -ve Balance Message Payday Not Proceeded var negativeBalancePaydayTrigger = TriggerBuilder.Create() .WithIdentity("negativeBalancePaydayTrigger", "cancelChore") .WithSchedule(CronScheduleBuilder.AtHourAndMinuteOnGivenDaysOfWeek(10, 0, DayOfWeek.Thursday).InTimeZone(TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time"))) .ForJob("SendMessagePaydayNotProceed", "cancelChore") .Build(); // Schedule the job using the jobs and triggers // scheduler.ScheduleJob(dailyChoresJob, dailyChoresTrigger); // Client told to stop this job // scheduler.ScheduleJob(weeklyChoresJob, weeklyChoresTrigger); // Client told to stop this job scheduler.ScheduleJob(makeWeeklyPaymentJob, makeWeeklyPaymentTrigger); scheduler.ScheduleJob(sendWeeklyPaydayStatusJob, sendWeeklyPaydayStatusTrigger); scheduler.ScheduleJob(notifyIncompleteMemberEnrollmentJob, notifyIncompleteNewMemberEnrollmentTrigger); scheduler.ScheduleJob(notifyParentHasNotLoggedInJob, notifyParentHasNotLoggedInTrigger); scheduler.ScheduleJob(renewSubscriptionJob, renewSubscriptionTrigger); //scheduler.ScheduleJob(notifyChildHasNotLoggedInJob, notifyChildHasNotLoggedInTrigger); // Client told to stop this job scheduler.ScheduleJob(notifyNoChoreCompletedJob, notifyNoChoreCompletedTrigger); scheduler.ScheduleJob(notifyContinuousChildActivityJob, notifyContinuousChildActivityTrigger); scheduler.ScheduleJob(notifySubscriptionRenewalJob, notifySubscriptionRenewalTrigger); scheduler.ScheduleJob(remindSMSApprovalJob, remindSMSApprovalTrigger); scheduler.ScheduleJob(cancelNotRespondedSMSJob, cancelNotRespondedSMSTrigger); scheduler.ScheduleJob(remindChorePaymentApprovalJob, remindChorePaymentApprovalTrigger); // scheduler.ScheduleJob(coreproMessageJob, coreproMessageTrigger); //scheduler.ScheduleJob(cancelPandingPaydayRequest, cancelChoreTrigger); //scheduler.ScheduleJob(SendMessagePaydayNotProceed, negativeBalancePaydayTrigger); }
protected override void OnStart(string[] args) { try { // construct a scheduler factory ISchedulerFactory schedFact = new StdSchedulerFactory(); // get a scheduler IScheduler sched = schedFact.GetScheduler(); sched.Start(); // define the job and tie it to our HelloJob class IJobDetail job = JobBuilder.Create <HelloJob>() .WithIdentity("myJob", "group1") .Build(); // Trigger the job to run now, and then every 40 seconds //ITrigger trigger = TriggerBuilder.Create() // .WithIdentity("myTrigger", "group1") // .StartNow() // .WithSimpleSchedule(x => x // .WithIntervalInSeconds(40) // .RepeatForever()) // .Build(); ITrigger trigger; //holiday calendar //HolidayCalendar cal = new HolidayCalendar(); //cal.AddExcludedDate(DateTime.Now.AddDays(1)); //sched.AddCalendar("myHolidays", cal, false,false); if (VocFunction.GetIsDaily()) { logger.Debug("Start Daily"); trigger = TriggerBuilder.Create() .WithIdentity("myTrigger") .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(VocFunction.GetHour(), VocFunction.GetMinutes())) // execute job daily at //.ModifiedByCalendar("myHolidays") // but not on holidays .Build(); } else if (VocFunction.GetIsWeekly()) { logger.Debug("Start Weekly"); logger.Debug("Day of week is : " + VocFunction.GetDayofWeek()); trigger = TriggerBuilder.Create() .WithIdentity("myTrigger") .WithSchedule(CronScheduleBuilder.WeeklyOnDayAndHourAndMinute(VocFunction.GetDayofWeek(), VocFunction.GetHour(), VocFunction.GetMinutes())) // execute job daily at //.ModifiedByCalendar("myHolidays") // but not on holidays .Build(); } else if (VocFunction.GetIsMonthly()) { logger.Debug("Start Monthly"); logger.Debug("Day of month is : " + VocFunction.GetDayofMonth()); trigger = TriggerBuilder.Create() .WithIdentity("myTrigger") .WithSchedule(CronScheduleBuilder.MonthlyOnDayAndHourAndMinute(VocFunction.GetDayofMonth(), VocFunction.GetHour(), VocFunction.GetMinutes())) // execute job daily at //.ModifiedByCalendar("myHolidays") // but not on holidays .Build(); } else { trigger = TriggerBuilder.Create() .WithIdentity("myTrigger", "group1") .WithSimpleSchedule(x => x .WithIntervalInSeconds(VocFunction.GetIntervalinSeconds()) .RepeatForever()) .Build(); } sched.ScheduleJob(job, trigger); } catch (Exception ex) { logger.Error(ex.Message); logger.Error(ex.InnerException); throw; } }
private TriggerBuilder AddDaily(TriggerBuilder triggerBuilder, ScheduleModel scheduler) { return(triggerBuilder.WithSchedule( CronScheduleBuilder.DailyAtHourAndMinute(scheduler.StarTime.Hour, scheduler.StarTime.Minute))); }
/// <summary> /// 每天固定时间 /// </summary> /// <param name="hour"></param> /// <param name="minute"></param> /// <returns></returns> protected ITrigger TriggerDaily(int hour, int minute) => BuildTrigger(t => t.WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(hour, minute)).Build());
private IScheduler _scheduler; // after Start, and until shutdown completes, references the scheduler object // starts the scheduler, defines the jobs and the triggers public void Start() { if (_scheduler != null) { throw new InvalidOperationException("Already started."); } //var properties = new NameValueCollection //{ // // json serialization is the one supported under .NET Core (binary isn't) // ["quartz.serializer.type"] = "json", // // the following setup of job store is just for example and it didn't change from v2 // ["quartz.jobStore.type"] = "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz", // ["quartz.jobStore.useProperties"] = "false", // ["quartz.jobStore.dataSource"] = "default", // ["quartz.jobStore.tablePrefix"] = "QRTZ_", // ["quartz.jobStore.driverDelegateType"] = "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz", // ["quartz.dataSource.default.provider"] = "SqlServer-41", // SqlServer-41 is the new provider for .NET Core // ["quartz.dataSource.default.connectionString"] = @"Server=(localdb)\MSSQLLocalDB;Database=Quartz;Integrated Security=true" //}; //var schedulerFactory = new StdSchedulerFactory(); //_scheduler = schedulerFactory.GetScheduler().Result; //_scheduler.Start().Wait(); //var userEmailsJob = JobBuilder.Create<SendUserEmailsJob>() // .WithIdentity("SendUserEmails") // .Build(); //var userEmailsTrigger = TriggerBuilder.Create() // .WithIdentity("UserEmailsCron") // .StartNow() // .WithCronSchedule("0 0 17 ? * MON,TUE,WED") // .Build(); //_scheduler.ScheduleJob(userEmailsJob, userEmailsTrigger).Wait(); //var adminEmailsJob = JobBuilder.Create<SendAdminEmailsJob>() // .WithIdentity("SendAdminEmails") // .Build(); //var adminEmailsTrigger = TriggerBuilder.Create() // .WithIdentity("AdminEmailsCron") // .StartNow() // .WithCronSchedule("0 0 9 ? * THU,FRI") // .Build(); //_scheduler.ScheduleJob(adminEmailsJob, adminEmailsTrigger).Wait(); var schedulerFactory = new StdSchedulerFactory(); _scheduler = schedulerFactory.GetScheduler().Result; _scheduler.Start().Wait(); IJobDetail job = JobBuilder.Create <ProgramUpdaterJob>().Build(); ITrigger trigger = TriggerBuilder.Create() // создаем триггер .WithIdentity("trigger1", "group1") // идентифицируем триггер с именем и группой .WithSchedule(CronScheduleBuilder.DailyAtHourAndMinute(19, 30)) //.WithDailyTimeIntervalSchedule(x => // x.WithIntervalInMinutes(60*24) // .StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(17, 1))) .Build(); // создаем триггер //DateTime timeForStart = DateTime.Parse("16:35"); //if (timeForStart < DateTime.Now) //{ // timeForStart = timeForStart.AddDays(1); //} //ITrigger trigger = TriggerBuilder.Create() // создаем триггер // .WithIdentity("trigger1", "group1") // идентифицируем триггер с именем и группой // .StartAt(timeForStart) // запуск сразу после начала выполнения // .WithDailyTimeIntervalSchedule() // //WithSimpleSchedule(x => x // настраиваем выполнение действия // // .WithIntervalInHours(24) // через 24 часа // // .RepeatForever()) // бесконечное повторение // .Build(); // создаем триггер _scheduler.ScheduleJob(job, trigger).Wait(); // начинаем выполнение работы }