2024-10-15 21:16:50 +00:00
|
|
|
|
using Elsa.Quartz.EntityFrameworkCore.PostgreSql;
|
2023-10-29 15:17:38 +00:00
|
|
|
|
using Elsa.Quartz.Features;
|
|
|
|
|
|
using JetBrains.Annotations;
|
|
|
|
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
|
|
|
|
using Quartz;
|
|
|
|
|
|
|
|
|
|
|
|
// ReSharper disable once CheckNamespace
|
|
|
|
|
|
namespace Elsa.EntityFrameworkCore.Extensions;
|
|
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Provides extensions to configure EF Core to use PostgreSQL.
|
|
|
|
|
|
/// </summary>
|
|
|
|
|
|
[PublicAPI]
|
|
|
|
|
|
public static class PostgreSqlQuartzExtensions
|
|
|
|
|
|
{
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
|
/// Configures the <see cref="QuartzFeature"/> to use the PostgreSQL job store.
|
|
|
|
|
|
/// </summary>
|
2024-06-18 11:53:57 +00:00
|
|
|
|
public static QuartzFeature UsePostgreSql(this QuartzFeature feature, string connectionString = Constants.DefaultConnectionString, bool useClustering = true, bool useContextPooling = false)
|
2023-10-29 15:17:38 +00:00
|
|
|
|
{
|
2024-06-18 11:53:57 +00:00
|
|
|
|
if (useContextPooling)
|
|
|
|
|
|
feature.Services.AddPooledDbContextFactory<PostgreSqlQuartzDbContext>(options => UseNpgsql(connectionString, options));
|
|
|
|
|
|
else
|
|
|
|
|
|
feature.Services.AddDbContextFactory<PostgreSqlQuartzDbContext>(options => UseNpgsql(connectionString, options));
|
2023-10-29 15:17:38 +00:00
|
|
|
|
|
|
|
|
|
|
feature.ConfigureQuartz += quartz =>
|
|
|
|
|
|
{
|
|
|
|
|
|
quartz.UsePersistentStore(store =>
|
|
|
|
|
|
{
|
|
|
|
|
|
store.UseNewtonsoftJsonSerializer();
|
2024-02-02 11:49:34 +00:00
|
|
|
|
store.UsePostgres(options =>
|
|
|
|
|
|
{
|
|
|
|
|
|
options.ConnectionString = connectionString;
|
|
|
|
|
|
options.TablePrefix = "quartz.qrtz_";
|
|
|
|
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
2023-10-29 15:17:38 +00:00
|
|
|
|
if (useClustering)
|
|
|
|
|
|
store.UseClustering();
|
|
|
|
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
feature.Module.ConfigureHostedService<RunMigrationsHostedService<PostgreSqlQuartzDbContext>>(-100);
|
|
|
|
|
|
|
|
|
|
|
|
return feature;
|
|
|
|
|
|
}
|
2024-06-18 11:53:57 +00:00
|
|
|
|
|
|
|
|
|
|
private static void UseNpgsql(string connectionString, DbContextOptionsBuilder options)
|
|
|
|
|
|
{
|
|
|
|
|
|
// Use PostgreSQL migrations.
|
|
|
|
|
|
options.UseNpgsql(connectionString, sqlServerDbContextOptionsBuilder => { sqlServerDbContextOptionsBuilder.MigrationsAssembly(typeof(PostgreSqlQuartzDbContext).Assembly.GetName().Name); });
|
|
|
|
|
|
}
|
2023-10-29 15:17:38 +00:00
|
|
|
|
}
|