diff --git a/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/AbpBackgroundJobQuartzOptions.cs b/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/AbpBackgroundJobQuartzOptions.cs index e9ecb41c57..1f9836d57d 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/AbpBackgroundJobQuartzOptions.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/AbpBackgroundJobQuartzOptions.cs @@ -10,7 +10,7 @@ namespace Volo.Abp.BackgroundJobs.Quartz public int RetryCount { get; set; } public int RetryIntervalMillisecond { get; set; } - + [NotNull] public Func RetryStrategy @@ -19,28 +19,28 @@ namespace Volo.Abp.BackgroundJobs.Quartz set => _retryStrategy = Check.NotNull(value, nameof(value)); } private Func _retryStrategy; - + public AbpBackgroundJobQuartzOptions() { RetryCount = 3; RetryIntervalMillisecond = 3000; _retryStrategy = DefaultRetryStrategy; } - + private async Task DefaultRetryStrategy(int retryIndex, IJobExecutionContext executionContext, JobExecutionException exception) { exception.RefireImmediately = true; - - var retryCount = executionContext.JobDetail.JobDataMap.GetIntValue(QuartzBackgroundJobManager.JobDataPrefix+ nameof(RetryCount)); + + var retryCount = executionContext.JobDetail.JobDataMap.GetString(QuartzBackgroundJobManager.JobDataPrefix+ nameof(RetryCount)).To(); if (retryIndex > retryCount) { exception.RefireImmediately = false; exception.UnscheduleAllTriggers = true; return; } - - var retryInterval = executionContext.JobDetail.JobDataMap.GetIntValue(QuartzBackgroundJobManager.JobDataPrefix+ nameof(RetryIntervalMillisecond)); + + var retryInterval = executionContext.JobDetail.JobDataMap.GetString(QuartzBackgroundJobManager.JobDataPrefix+ nameof(RetryIntervalMillisecond)).To(); await Task.Delay(retryInterval); } } -} \ No newline at end of file +} diff --git a/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/QuartzBackgroundJobManager.cs b/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/QuartzBackgroundJobManager.cs index 83b74297a5..42e89ffb93 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/QuartzBackgroundJobManager.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/QuartzBackgroundJobManager.cs @@ -3,6 +3,7 @@ using System.Threading.Tasks; using Microsoft.Extensions.Options; using Quartz; using Volo.Abp.DependencyInjection; +using Volo.Abp.Json; namespace Volo.Abp.BackgroundJobs.Quartz { @@ -16,9 +17,12 @@ namespace Volo.Abp.BackgroundJobs.Quartz protected AbpBackgroundJobQuartzOptions Options { get; } - public QuartzBackgroundJobManager(IScheduler scheduler, IOptions options) + protected IJsonSerializer JsonSerializer { get; } + + public QuartzBackgroundJobManager(IScheduler scheduler, IOptions options, IJsonSerializer jsonSerializer) { Scheduler = scheduler; + JsonSerializer = jsonSerializer; Options = options.Value; } @@ -33,10 +37,10 @@ namespace Volo.Abp.BackgroundJobs.Quartz { var jobDataMap = new JobDataMap { - {nameof(TArgs), args}, - {JobDataPrefix+ nameof(Options.RetryCount), retryCount}, - {JobDataPrefix+ nameof(Options.RetryIntervalMillisecond), retryIntervalMillisecond}, - {JobDataPrefix+ RetryIndex, 0} + {nameof(TArgs), JsonSerializer.Serialize(args)}, + {JobDataPrefix+ nameof(Options.RetryCount), retryCount.ToString()}, + {JobDataPrefix+ nameof(Options.RetryIntervalMillisecond), retryIntervalMillisecond.ToString()}, + {JobDataPrefix+ RetryIndex, "0"} }; var jobDetail = JobBuilder.Create>().RequestRecovery().SetJobData(jobDataMap).Build(); diff --git a/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/QuartzJobExecutionAdapter.cs b/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/QuartzJobExecutionAdapter.cs index b6759b256e..79776d0726 100644 --- a/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/QuartzJobExecutionAdapter.cs +++ b/framework/src/Volo.Abp.BackgroundJobs.Quartz/Volo/Abp/BackgroundJobs/Quartz/QuartzJobExecutionAdapter.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Quartz; +using Volo.Abp.Json; namespace Volo.Abp.BackgroundJobs.Quartz { @@ -16,15 +17,18 @@ namespace Volo.Abp.BackgroundJobs.Quartz protected AbpBackgroundJobQuartzOptions BackgroundJobQuartzOptions { get; } protected IServiceScopeFactory ServiceScopeFactory { get; } protected IBackgroundJobExecuter JobExecuter { get; } + protected IJsonSerializer JsonSerializer { get; } public QuartzJobExecutionAdapter( IOptions options, IOptions backgroundJobQuartzOptions, IBackgroundJobExecuter jobExecuter, - IServiceScopeFactory serviceScopeFactory) + IServiceScopeFactory serviceScopeFactory, + IJsonSerializer jsonSerializer) { JobExecuter = jobExecuter; ServiceScopeFactory = serviceScopeFactory; + JsonSerializer = jsonSerializer; Options = options.Value; BackgroundJobQuartzOptions = backgroundJobQuartzOptions.Value; Logger = NullLogger>.Instance; @@ -34,7 +38,7 @@ namespace Volo.Abp.BackgroundJobs.Quartz { using (var scope = ServiceScopeFactory.CreateScope()) { - var args = (TArgs) context.JobDetail.JobDataMap.Get(nameof(TArgs)); + var args = JsonSerializer.Deserialize(context.JobDetail.JobDataMap.GetString(nameof(TArgs))); var jobType = Options.GetJob(typeof(TArgs)).JobType; var jobContext = new JobExecutionContext(scope.ServiceProvider, jobType, args); try @@ -44,16 +48,16 @@ namespace Volo.Abp.BackgroundJobs.Quartz catch (Exception exception) { var jobExecutionException = new JobExecutionException(exception); - - var retryIndex = context.JobDetail.JobDataMap.GetIntValue(QuartzBackgroundJobManager.JobDataPrefix+ QuartzBackgroundJobManager.RetryIndex); + + var retryIndex = context.JobDetail.JobDataMap.GetString(QuartzBackgroundJobManager.JobDataPrefix+ QuartzBackgroundJobManager.RetryIndex).To(); retryIndex++; - context.JobDetail.JobDataMap.Put(QuartzBackgroundJobManager.JobDataPrefix+ QuartzBackgroundJobManager.RetryIndex, retryIndex); - + context.JobDetail.JobDataMap.Put(QuartzBackgroundJobManager.JobDataPrefix+ QuartzBackgroundJobManager.RetryIndex, retryIndex.ToString()); + await BackgroundJobQuartzOptions.RetryStrategy.Invoke(retryIndex, context, jobExecutionException); - + throw jobExecutionException; } } } } -} \ No newline at end of file +}