Browse Source

Merge pull request #7010 from abpframework/liangshiwei/quartz-patch-1

Use Standby instead of PauseAll method
pull/7013/head
maliming 6 years ago
committed by GitHub
parent
commit
43750ab2f2
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/AbpBackgroundWorkersQuartzModule.cs
  2. 2
      framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs
  3. 9
      framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerManager.cs
  4. 30
      framework/src/Volo.Abp.Quartz/Volo/Abp/Quartz/AbpQuartzModule.cs

10
framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/AbpBackgroundWorkersQuartzModule.cs

@ -26,20 +26,20 @@ namespace Volo.Abp.BackgroundWorkers.Quartz
public override void OnPreApplicationInitialization(ApplicationInitializationContext context)
{
var options = context.ServiceProvider.GetService<IOptions<AbpBackgroundWorkerOptions>>().Value;
var options = context.ServiceProvider.GetRequiredService<IOptions<AbpBackgroundWorkerOptions>>().Value;
if (!options.IsEnabled)
{
var quartzOptions = context.ServiceProvider.GetService<IOptions<AbpQuartzOptions>>().Value;
quartzOptions.StartSchedulerFactory = scheduler => Task.CompletedTask;
var quartzOptions = context.ServiceProvider.GetRequiredService<IOptions<AbpQuartzOptions>>().Value;
quartzOptions.StartSchedulerFactory = _ => Task.CompletedTask;
}
}
public override void OnApplicationInitialization(ApplicationInitializationContext context)
{
var quartzBackgroundWorkerOptions = context.ServiceProvider.GetService<IOptions<AbpBackgroundWorkerQuartzOptions>>().Value;
var quartzBackgroundWorkerOptions = context.ServiceProvider.GetRequiredService<IOptions<AbpBackgroundWorkerQuartzOptions>>().Value;
if (quartzBackgroundWorkerOptions.IsAutoRegisterEnabled)
{
var backgroundWorkerManager = context.ServiceProvider.GetService<IBackgroundWorkerManager>();
var backgroundWorkerManager = context.ServiceProvider.GetRequiredService<IBackgroundWorkerManager>();
var works = context.ServiceProvider.GetServices<IQuartzBackgroundWorker>().Where(x=>x.AutoRegister);
foreach (var work in works)

2
framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerAdapter.cs

@ -57,7 +57,7 @@ namespace Volo.Abp.BackgroundWorkers.Quartz
.Build();
}
public async override Task Execute(IJobExecutionContext context)
public override async Task Execute(IJobExecutionContext context)
{
var worker = (IBackgroundWorker) ServiceProvider.GetService(typeof(TWorker));
var workerContext = new PeriodicBackgroundWorkerContext(ServiceProvider);

9
framework/src/Volo.Abp.BackgroundWorkers.Quartz/Volo/Abp/BackgroundWorkers/Quartz/QuartzBackgroundWorkerManager.cs

@ -19,14 +19,17 @@ namespace Volo.Abp.BackgroundWorkers.Quartz
public virtual async Task StartAsync(CancellationToken cancellationToken = default)
{
await _scheduler.ResumeAll(cancellationToken);
if (_scheduler.IsStarted && _scheduler.InStandbyMode)
{
await _scheduler.Start(cancellationToken);
}
}
public virtual async Task StopAsync(CancellationToken cancellationToken = default)
{
if (!_scheduler.IsShutdown)
if (_scheduler.IsStarted && !_scheduler.InStandbyMode)
{
await _scheduler.PauseAll(cancellationToken);
await _scheduler.Standby(cancellationToken);
}
}

30
framework/src/Volo.Abp.Quartz/Volo/Abp/Quartz/AbpQuartzModule.cs

@ -16,9 +16,6 @@ namespace Volo.Abp.Quartz
{
var options = context.Services.ExecutePreConfiguredActions<AbpQuartzOptions>();
// TODO: Remove this once Pomelo update MySqlConnector to >= 1.0.0 : https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/pull/1103
AdaptMysqlConnector();
context.Services.AddQuartz(options.Properties, build =>
{
// these are the defaults
@ -55,7 +52,7 @@ namespace Volo.Abp.Quartz
context.Services.AddSingleton(serviceProvider =>
{
return AsyncHelper.RunSync(() => serviceProvider.GetService<ISchedulerFactory>().GetScheduler());
return AsyncHelper.RunSync(() => serviceProvider.GetRequiredService<ISchedulerFactory>().GetScheduler());
});
Configure<AbpQuartzOptions>(quartzOptions =>
@ -69,7 +66,7 @@ namespace Volo.Abp.Quartz
{
var options = context.ServiceProvider.GetRequiredService<IOptions<AbpQuartzOptions>>().Value;
_scheduler = context.ServiceProvider.GetService<IScheduler>();
_scheduler = context.ServiceProvider.GetRequiredService<IScheduler>();
AsyncHelper.RunSync(() => options.StartSchedulerFactory.Invoke(_scheduler));
}
@ -81,28 +78,5 @@ namespace Volo.Abp.Quartz
AsyncHelper.RunSync(() => _scheduler.Shutdown());
}
}
private void AdaptMysqlConnector()
{
var mySqlAvailable = System.Type.GetType("MySql.Data.MySqlClient.MySqlConnection, MySqlConnector") != null;
if (mySqlAvailable)
{
// Overriding the default 'MySqlConnector' provider to use the old 'MySql.Data' namespace found in MySqlConnector < 1.0.0
DbProvider.RegisterDbMetadata("MySqlConnector", new DbMetadata()
{
ProductName = "MySQL, MySqlConnector provider",
AssemblyName = "MySqlConnector",
ConnectionType = System.Type.GetType("MySql.Data.MySqlClient.MySqlConnection, MySqlConnector"),
CommandType = System.Type.GetType("MySql.Data.MySqlClient.MySqlCommand, MySqlConnector"),
ParameterType = System.Type.GetType("MySql.Data.MySqlClient.MySqlParameter, MySqlConnector"),
ParameterDbType = System.Type.GetType("MySql.Data.MySqlClient.MySqlDbType, MySqlConnector"),
ParameterDbTypePropertyName = "MySqlDbType",
ParameterNamePrefix = "?",
ExceptionType = System.Type.GetType("MySql.Data.MySqlClient.MySqlException, MySqlConnector"),
BindByName = true,
DbBinaryTypeName = "Blob"
});
}
}
}
}

Loading…
Cancel
Save