iT邦幫忙

0

C# MVC Quartz 每日定時備份資料請益

  • 分享至 

  • xImage

我是C# MVC,在啟動後有透過在Program.cs中加入了ScheduledTasks.Start()
也有在斷點偵測到有運行到ScheduledTasks.Start()
但時間到的時候卻不會執行Execute()的這段function
想請教我的code是不是有問題,有哪裡需要修改的地方
感謝

public class ScheduledTasks
{
    public static async void Start()
    {
        // 設定定時任務
        IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();
        await scheduler.Start();

        // 定義工作
        IJobDetail job = JobBuilder.Create<YourJobClass>()
            .WithIdentity("jobName", "groupName")
            .Build();

        // 定義觸發器
        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("triggerName", "groupName")
            .WithDailyTimeIntervalSchedule(
                x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(15, 00))
                        .EndingDailyAfterCount(1))
            .Build();

        // 排程工作
        await scheduler.ScheduleJob(job, trigger);
    }
}

public class YourJobClass : IJob
{
    private readonly DBmanager _db;
    public YourJobClass(DBmanager db) => _db = db;

    public async Task Execute(IJobExecutionContext context)
    {
        await Task.Run(() =>
        {
            _db.DayBackupERPToCRM();
        });
    }
}
柯柯 iT邦新手 2 級 ‧ 2023-05-26 15:45:31 檢舉
我之前有遇過 觸發器的時間部分錯誤 不會觸發
他上面有寫是24時制的,兩個引數都為int分別為小時與分鐘
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
科科
iT邦好手 8 級 ‧ 2023-05-26 15:38:02
await scheduler.Start(); 

這個要放在最後面,試試看

感謝回覆,以下為修改過後的code,但依然不會動qq

public class ScheduledTasks
{
    public static async void Start()
    {
        // 設定定時任務
        IScheduler scheduler = await StdSchedulerFactory.GetDefaultScheduler();

        // 定義工作
        IJobDetail job = JobBuilder.Create<YourJobClass>()
            .WithIdentity("jobName", "groupName")
            .Build();

        // 定義觸發器
        ITrigger trigger = TriggerBuilder.Create()
            .WithIdentity("triggerName", "groupName")
            .WithDailyTimeIntervalSchedule(
                x => x.StartingDailyAt(TimeOfDay.HourAndMinuteOfDay(16, 30))
                        .EndingDailyAfterCount(1))
            .Build();

        // 排程工作
        await scheduler.ScheduleJob(job, trigger);
        await scheduler.Start();
    }
}
科科 iT邦好手 8 級 ‧ 2023-05-26 17:45:41 檢舉

你可以試試把trigger 先設定簡單一點,像是每5秒一次,
然後先訂另外一個單純寫log的Job,先把情境弄到最單純測試看看。

我自己用的是比較複雜的net core版本,
所以很多要注意的地方不一樣XD

我要發表回答

立即登入回答