예제 #1
0
        public void Configuration(IAppBuilder app)
        {
            Logger.Info("Application Start");
            app.UseNLog();
            ConfigureAuth(app);
            HangfireInitializer.ConfigureHangfire(app);

            HangfireInitializer.InitializeJobs();
        }
예제 #2
0
 public Task InitializeSchemaAsync(string connectionString, CancellationToken cancellationToken = default)
 {
     return(HangfireInitializer.EnsureDbAndTablesCreatedAsync(connectionString, null, cancellationToken));
 }
        public virtual async Task InitializeDbAsync(IServiceProvider serviceProvider, CancellationToken cancellationToken)
        {
            var jobStorage        = serviceProvider.GetService <JobStorage>();
            var newHangfireServer = jobStorage != null && jobStorage.GetType() != typeof(NoopJobStorage);

            if (newHangfireServer)
            {
                var configuration = serviceProvider.GetRequiredService <HangfireConfiguration>();

                //Initialize Hangfire Db
                if (!string.IsNullOrEmpty(configuration.ConnectionString))
                {
                    if (configuration.DbInitialiation == DbInitialiation.PrepareSchemaIfNecessary)
                    {
                        if (configuration.ExistingConnection == null)
                        {
                            HangfireJobStorage.GetJobStorage(configuration.ConnectionString, options => {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = false;
                                options.EnableLongPolling        = false;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                        else
                        {
                            HangfireJobStorage.GetJobStorage(configuration.ExistingConnection, options => {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = false;
                                options.EnableLongPolling        = false;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                    }
                    else if (configuration.DbInitialiation == DbInitialiation.PrepareSchemaIfNecessaryAndHeavyMigrations)
                    {
                        if (configuration.ExistingConnection == null)
                        {
                            HangfireJobStorage.GetJobStorage(configuration.ConnectionString, options =>
                            {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = true;
                                options.EnableLongPolling        = false;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                        else
                        {
                            HangfireJobStorage.GetJobStorage(configuration.ExistingConnection, options =>
                            {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = true;
                                options.EnableLongPolling        = false;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                    }
                    else if (configuration.DbInitialiation == DbInitialiation.EnsureTablesDeletedThenEnsureDbAndTablesCreated)
                    {
                        if (configuration.ExistingConnection == null)
                        {
                            await HangfireInitializer.EnsureTablesDeletedAsync(configuration.ConnectionString, configuration.SchemaName);

                            await HangfireInitializer.EnsureDbAndTablesCreatedAsync(configuration.ConnectionString, options =>
                            {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = true;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                        else
                        {
                            await HangfireInitializer.EnsureTablesDeletedAsync(configuration.ExistingConnection, configuration.SchemaName);

                            await HangfireInitializer.EnsureDbAndTablesCreatedAsync(configuration.ExistingConnection, options =>
                            {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = true;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                    }
                    else if (configuration.DbInitialiation == DbInitialiation.EnsureDbAndTablesCreated)
                    {
                        if (configuration.ExistingConnection == null)
                        {
                            await HangfireInitializer.EnsureDbAndTablesCreatedAsync(configuration.ConnectionString, options =>
                            {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = false;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                        else
                        {
                            await HangfireInitializer.EnsureDbAndTablesCreatedAsync(configuration.ExistingConnection, options =>
                            {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = false;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                    }
                    else if (configuration.DbInitialiation == DbInitialiation.EnsureDbAndTablesCreatedAndHeavyMigrations)
                    {
                        if (configuration.ExistingConnection == null)
                        {
                            await HangfireInitializer.EnsureDbAndTablesCreatedAsync(configuration.ConnectionString, options => {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = true;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                        else
                        {
                            await HangfireInitializer.EnsureDbAndTablesCreatedAsync(configuration.ExistingConnection, options => {
                                options.PrepareSchemaIfNecessary = true;
                                options.EnableHeavyMigrations    = true;
                                options.SchemaName = configuration.SchemaName;
                            });
                        }
                    }
                }

                //Launch Server
                var applicationLifetime = serviceProvider.GetRequiredService <IApplicationLifetime>();
                var additionalProcesses = serviceProvider.GetServices <IBackgroundProcess>();
                var setter        = serviceProvider.GetRequiredService <Action <IBackgroundProcessingServer> >();
                var serverDetails = HangfireLauncher.StartHangfireServer(serviceProvider.GetRequiredService <BackgroundJobServerOptions>(), jobStorage, new HangfireLauncherOptions()
                {
                    ApplicationLifetime = applicationLifetime, AdditionalProcesses = additionalProcesses
                });
                setter(serverDetails.Server);
            }
        }
        public async Task InitializeSchemaAsync(string connectionString, CancellationToken cancellationToken = default)
        {
            await HangfireInitializer.EnsureTablesDeletedAsync(connectionString, cancellationToken);

            await HangfireInitializer.EnsureDbAndTablesCreatedAsync(connectionString, null, cancellationToken);
        }