コード例 #1
0
        public QuartzManager(ILogger <QuartzService> logger, IServiceProvider serviceProvider, QuartzRepository yunYingRepository, IOptions <QuartzOptions> options)
        {
            _logger            = logger;
            _yunYingRepository = yunYingRepository;
            _quartzOptions     = options.Value;
            //配置AdoJobStore的集群功能
            //1-所有实例都必须使用不同的属性文件,因为它们的实例ID必须不同,但是所有其他属性都应该相同。
            //2-您可能应该从一组“新”表开始(假设您由于其他测试混合了数据,具有集群的非集群设置可能很糟糕。)
            //3-尝试在它们运行时杀死其中一个集群实例,然后看看其余实例将恢复正在进行的作业。请注意,默认情况下,检测到故障可能需要15秒钟左右(最少7.5秒)的时间设置
            //4-也可以尝试使用/不使用已注册的shutdown-hook插件来运行它调度程序。(quartz.plugins.management.ShutdownHookPlugin)。
            //5-注意:切勿在单独的计算机上运行群集,除非它们在不同的计算机上运行使用某种形式的时间同步服务(守护程序)来同步时钟。

            if (_quartzOptions.Clustered)
            {
                //配置持久化-集群
                NameValueCollection properties = new NameValueCollection();
                //开启集群
                properties["quartz.jobStore.clustered"] = _quartzOptions.Clustered ? "true" : "false";
                //调度标识名,集群中每一个实例都必须使用相同的名称
                properties["quartz.scheduler.instanceName"] = string.IsNullOrEmpty(_quartzOptions.InstanceName) ? "TaskScheduler" : _quartzOptions.InstanceName;
                //ID设置为自动获取 每一个必须不同
                properties["quartz.scheduler.instanceId"] = string.IsNullOrEmpty(_quartzOptions.InstanceId) ? "AUTO" : _quartzOptions.InstanceId;
                //这个时间大于10000(10秒)会导致WithMisfireHandlingInstructionDoNothing不生效。
                properties["quartz.jobStore.misfireThreshold"] = "5000";
                //properties["quartz.threadPool.type"] = "Quartz.Simpl.SimpleThreadPool, Quartz";
                //线程池个数
                properties["quartz.threadPool.threadCount"] = string.IsNullOrEmpty(_quartzOptions.ThreadCount) ? "20" : _quartzOptions.ThreadCount;
                //存储类型(数据保存方式为持久化)
                properties["quartz.jobStore.type"] = string.IsNullOrEmpty(_quartzOptions.JobStoreType) ? "Quartz.Impl.AdoJobStore.JobStoreTX, Quartz" : _quartzOptions.JobStoreType;
                //设置为TRUE不会出现序列化非字符串类到 BLOB 时产生的类版本问题
                //properties["quartz.jobStore.useProperties"] = "true";
                //数据库别名(任意)
                properties["quartz.jobStore.dataSource"] = "myDS";
                //表明前缀
                properties["quartz.jobStore.tablePrefix"] = string.IsNullOrEmpty(_quartzOptions.TablePrefix) ? "QRTZ_" : _quartzOptions.TablePrefix;
                //使用Sqlserver的Ado操作代理类
                properties["quartz.jobStore.driverDelegateType"] = string.IsNullOrEmpty(_quartzOptions.DriverDelegateType) ? "Quartz.Impl.AdoJobStore.SqlServerDelegate, Quartz" : _quartzOptions.DriverDelegateType;
                //连接字符串
                properties["quartz.dataSource.myDS.connectionString"] = _quartzOptions.ConnectionString;
                //sqlserver版本
                properties["quartz.dataSource.myDS.provider"] = string.IsNullOrEmpty(_quartzOptions.Provider) ? "SqlServer" : _quartzOptions.Provider;
                //序列化类型(json)
                properties["quartz.serializer.type"] = string.IsNullOrEmpty(_quartzOptions.SerializerType) ? "json" : _quartzOptions.SerializerType;

                //创建作业调度池
                _scheduler = new StdSchedulerFactory(properties).GetScheduler().Result;
            }
            else
            {
                //创建作业调度池
                _scheduler = new StdSchedulerFactory().GetScheduler().Result;
            }
            //实现Job的注入(quartz默认情况下,它仅支持无参数构造函数)
            _scheduler.JobFactory = new ServiceCollectionJobFactory(serviceProvider);
        }
コード例 #2
0
 public LoginController(ILogger <LoginController> logger, QuartzRepository yunYingRepository)
 {
     _logger            = logger;
     _yunYingRepository = yunYingRepository;
 }
コード例 #3
0
 public TaskJob(ILogger <TaskJob> logger, QuartzRepository yunYingRepository)
 {
     _logger            = logger;
     _yunYingRepository = yunYingRepository;
 }
コード例 #4
0
 public TaskJobController(ILogger <TaskJobController> logger, QuartzRepository yunYingRepository, QuartzManager quartzManager)
 {
     _logger            = logger;
     _yunYingRepository = yunYingRepository;
     _quartzManager     = quartzManager;
 }