|
|
|
@ -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<AbpBackgroundJobOptions> options, |
|
|
|
IOptions<AbpBackgroundJobQuartzOptions> backgroundJobQuartzOptions, |
|
|
|
IBackgroundJobExecuter jobExecuter, |
|
|
|
IServiceScopeFactory serviceScopeFactory) |
|
|
|
IServiceScopeFactory serviceScopeFactory, |
|
|
|
IJsonSerializer jsonSerializer) |
|
|
|
{ |
|
|
|
JobExecuter = jobExecuter; |
|
|
|
ServiceScopeFactory = serviceScopeFactory; |
|
|
|
JsonSerializer = jsonSerializer; |
|
|
|
Options = options.Value; |
|
|
|
BackgroundJobQuartzOptions = backgroundJobQuartzOptions.Value; |
|
|
|
Logger = NullLogger<QuartzJobExecutionAdapter<TArgs>>.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<TArgs>(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<int>(); |
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|