コード例 #1
0
        public static IServiceCollection AddCoreJobServer(this IServiceCollection services,
                                                          IConfiguration configuration, Action <CoreJobServerOptions> action = null)
        {
            // options
            var options = new CoreJobServerOptions();

            action?.Invoke(options);
            services.AddOptionConfiguration(configuration, options);
            services.AddSingleton(options);

            // ef core
            EntityFrameworkManager.IsCommunity = true;
            services.AddDbContext <JobDbContext>((provider, options) =>
            {
                var storeOptions = provider.GetRequiredService <IOptions <StoreOptions> >().Value;
                provider.GetRequiredService <IStoreProvider>()?.OptionsAction(options, storeOptions);
                options.EnableSensitiveDataLogging().EnableDetailedErrors();
            });

            // quartz
            services.AddQuartz(q =>
            {
                q.AddJobListener <CoreJobListener>(GroupMatcher <JobKey> .GroupEquals(JobConstant.Job_Default_Group));
                q.AddTriggerListener <CoreJobListener>(GroupMatcher <TriggerKey> .GroupEquals(JobConstant.Job_Default_Group));
                q.UseMicrosoftDependencyInjectionScopedJobFactory();
            });

            // services
            services.AddTransient <IServerSender, ServerSender>();
            services.AddSingleton <IJobSchedulerHandler, JobSchedulerHandler>();
            services.AddHostedService <JobSchedulerService>();
            services.AddSingleton <ISystemScheduler, RegistryHealthCheckScheduler>();

            // job
            if (!options.JobAssemblies.Contains(typeof(JobServerExtensions).Assembly))
            {
                options.JobAssemblies.Add(typeof(JobServerExtensions).Assembly);
            }

            JobUtilExtensions.CollectByInterface <IJob>(options.JobAssemblies).ForEach(t =>
            {
                services.AddScoped(t);
            });

            // route table
            services.AddRouteTable(new ServerRouteTable());

            // quartz server
            services.AddQuartzServer(options =>
            {
                options.WaitForJobsToComplete = true;
            });

            foreach (var item in options.Extensions)
            {
                item.AddServices(services);
            }

            return(services);
        }
コード例 #2
0
 public CoreJobServerMiddleware(CoreJobServerOptions options,
                                ServerRouteTable routeTable,
                                RequestHandler requestHandler,
                                RequestDelegate next)
 {
     _options        = options;
     _routeTable     = routeTable;
     _next           = next;
     _requestHandler = requestHandler;
 }
コード例 #3
0
 public ClearLogsJob(JobDbContext dbContext, CoreJobServerOptions options)
 {
     _dbContext = dbContext;
     _options   = options;
 }
コード例 #4
0
 public DefaultCoreJob(IServerSender serverSender,
                       CoreJobServerOptions options)
 {
     _serverSender = serverSender;
     _options      = options;
 }
コード例 #5
0
 public ServerSender(CoreJobServerOptions options,
                     ILogger <ServerSender> logger)
 {
     _options = options;
     _logger  = logger;
 }
コード例 #6
0
        public static CoreJobServerOptions UseMysql(this CoreJobServerOptions options, Action <StoreOptions> configure)
        {
            options.RegisterExtension(new MysqlJobOptionsExtension(configure));

            return(options);
        }