From ebaf78869374974a6c3f51520e3496cd2c5cd14e Mon Sep 17 00:00:00 2001 From: Erol Arkat Date: Thu, 14 Jan 2021 10:51:19 +0300 Subject: [PATCH 1/2] version update --- common.props | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/common.props b/common.props index f5db446396..b16d6e2c85 100644 --- a/common.props +++ b/common.props @@ -1,7 +1,7 @@ latest - 4.2.0 + 4.2.0-rc.1 $(NoWarn);CS1591;CS0436 https://abp.io/assets/abp_nupkg.png https://abp.io/ From e928a57e97ac42a1415112ef75f8c158b7d01a52 Mon Sep 17 00:00:00 2001 From: liangshiwei Date: Thu, 14 Jan 2021 16:49:56 +0800 Subject: [PATCH 2/2] Always store string type values to JobDataMap --- .../Quartz/AbpBackgroundJobQuartzOptions.cs | 16 +++++++-------- .../Quartz/QuartzBackgroundJobManager.cs | 14 ++++++++----- .../Quartz/QuartzJobExecutionAdapter.cs | 20 +++++++++++-------- 3 files changed, 29 insertions(+), 21 deletions(-) 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 +}