Кварцевая кластерная возможность:
Вышеуказанное личное понимание. Давайте начнем основной текст этой статьи. Эта статья в основном представляет соответствующий контент о построении Spring Boot + Quartz Clusters. Это обменивается вашей ссылкой и обучением. Я не скажу многое ниже. Давайте посмотрим на подробное введение вместе.
Шаги следующие:
Конфигурация Boot Bean Bean:
@ConfigurationPublic Class QuartzConfig {@Value ("$ {Quartz.scheduler.instancename}") Private String QuartzinStancEname; @Value ("$ {org.quartz.datasource.myds.driver}") частная строка mydsdriver; @Value ("$ {org.quartz.datasource.myds.url}") частная строка mydsuser; @Value ("$ {org.quartz.datasource.myds.password}") частная строка mydspassword; @Value ("$ {org.quartz.datasource.myds.maxconnections}") частная строка mydsmaxconnections; / ** * Установить свойства * @return * @throws ioexception */ private properties quartzproperties () throws ioexception {свойства prop = new Properties (); prop.put ("quartz.scheduler.instancename", Quartzinstancename); prop.put ("org.quartz.scheduler.instanceid", "auto"); prop.put ("org.quartz.scheduler.skipupdatecheck", "true"); prop.put ("org.quartz.scheduler.jmx.export", "true"); prop.put ("org.quartz.jobstore.class", "org.quartz.impl.jdbcjobstore.jobstoretx"); prop.put ("org.quartz.jobstore.driverdelegateclass", "org.quartz.impl.jdbcjobstore.stdjdbcdelegate"); prop.put ("org.quartz.jobstore.datasource", "quartzdatasource"); prop.put ("org.quartz.jobstore.tableprefix", "qrtz_"); prop.put ("org.quartz.jobstore.isclustered", "true"); prop.put ("org.quartz.jobstore.clustercheckininterval", "20000"); prop.put ("org.quartz.jobstore.datasource", "myds"); prop.put ("org.quartz.jobstore.maxmisfirestohandleatatime", "1"); prop.put ("org.quartz.jobstore.misfirethreshold", "120000"); prop.put ("org.quartz.jobstore.txisolationLevelSerializable", "true"); prop.put ("org.quartz.jobstore.selectwithlocksql", "select * from {0} locks, где lock_name =? для обновления"); prop.put ("org.quartz.threadpool.class", "org.quartz.simpl.simplethreadpool"); prop.put ("org.quartz.threadpool.threadcount", "10"); prop.put ("org.quartz.threadpool.threadpriority", "5"); prop.put ("org.quartz.threadpool.threadsinheritcontextclassloaderoFinitializingThread", "true"); prop.put ("org.quartz.datasource.myds.driver", mydsdriver); prop.put ("org.quartz.datasource.myds.url", mydsurl); prop.put ("org.quartz.datasource.myds.user", mydsuser); prop.put ("org.quartz.datasource.myds.password", mydspassword); System.out.println ("mydsmaxConnections:" + mydsmaxConnections); prop.put ("org.quartz.datasource.myds.maxconnections", mydsmaxconnections); prop.put ("org.quartz.plugin.trigghistory.class", "org.quartz.plugins.history.loggjobhistoryplugin"); prop.put ("org.quartz.plugin.shutdownhook.class", "org.quartz.plugins.shutdownhookplugin"); prop.put ("org.quartz.plugin.shutdownhook.cleanshutdown", "true"); вернуть опору; } @Bean public pradelerfactorybeanbean schedulerfactorybean (@qualifier ("dialogjobtrigger") триггер Cronjobtrigger) throws ioexception {pradelerfactorybean factory = new SchedulerFactorybean (); // Это позволяет обновлять триггеры в DB При обновлении настройки в файле конфигурации: // используется для Quartz Cluster, QuartzScheduler обновляет существующие задания при запуске, чтобы не нужно удалять таблицу QRTZ_JOB_DETAILS после изменения целевого объема. Соответствующая запись Factory.SetoverWriteExistingJobs (True); // Используется для кварцевого кластера, загрузочный Quartz Data Source //factory.setDatasource(datasource); // Quartzscheduler задерживает запуск запуска, после 10 секунд запуска приложения, Quartzscheduler запускает Factory.setStartupdelay (10); // Используется для кварцевого кластера, загрузочный кварцевый источник данных Factory.setQuartzProperties (QuartzProperties ()); factory.setautostartup (true); Factory.SetApplicationContextSchedulerContextKey ("ApplicationContext"); // Зарегистрировать триггер factory.setTriggers (cronjobtrigger); <br Data-filtered = "Filtreed"> // Использовать файл конфигурации напрямую // factory.setConfiglocation (новый файл файловой системы (this.getClass (). GetResource ("/quartz.properties"). GetPath ());); вернуть фабрику; } / ** * Загрузка задания * @return * / @bean public jobdetailfactorybean updatedialogstatusjobdetail () {return createjobdetail (infokingjobdetaildetailfactory.class, "updatedialogstatusgroup", "dialogjob"); }/** * Загрузите триггер * @param jobdetail * @return */@bean (name = "dialogjobtrigger") public crontriggerfactorybean dialogstatusjobtrigger (@qualifier ("updatedialogstatusjobdetail") jobdetail jobdetail) {return DialogStaTugrigger (jobDetail, "0/"? } / ** * Создание работы работы * @param jobclass * @param GroupName * @param targetObject * @return * / private static jobdetailfactorybean createjobdetail (class <?> Jobclass, String GroupName, String targetObject) {jobDetailFactory FactoryBean = new JobDetailFactoryBeanbean (); factorybean.setJobclass (jobclass); Factorybean.SetDurability (True); Factorybean.SetRequestsRecovery (True); Factorybean.SetGroup (GroupName); Map <string, string> map = new hashmap <> (); map.put ("targetObject", targetObject); map.put ("targetmethod", "execute"); Factorybean.SetJobdataAsmap (MAP); вернуть фабрику; } / ** * Создать завод с триггером * @param JobDetail * @param cronexpression * @return * / private static crontriggerfactorybean dialogstatustrigger (jobdetail jobdetail, String cronexpression) {crontriggerfactorybean factorybean = new CrontriggerFactorybean (); Factorybean.setJobdetail (JobDetail); Factorybean.SetCronexPression (Cronexpression); вернуть фабрику; }}Infokingjobdetaildetailfactory объект:
открытый класс infokingjobdetaildetailfactory quartzjobbean {// класс, где запланированная задача находится в частной строке TargetObject; // конкретная запланированная задача должна быть выполнена частной строкой TargetMethod; Private ApplicationContext CTX; @Override Protected void executeInternal (jobExecutioncontext context) throws jobExecutionException {try {Object oargetObject = ctx.getbean (targetObject); Метод m = null; try {m = oargetObject.getClass (). getMethod (TargetMethod); M.Invoke (OtargetObject); } catch (securityException e) {e.printstackTrace (); } catch (nosuchmethodexception e) {e.printstacktrace (); }} catch (Exception e) {бросить новый JobExecutionException (e); }} public void setApplicationContext (ApplicationContext ApplicationContext) {this.ctx = ApplicationContext; } public void setargetObject (string targetObject) {this.TargetObject = targetObject; } public void SetTargetMethod (String TargetMethod) {this.TargetMethod = targetMethod; }}Примечание. Сет -метод не должен отсутствовать. ApplicationContext в SetApplicationContext связан со значением, заполненным Factory.SetApplicationContextSchedulerContextKey ("ApplicationContext"). Принцип реализован BeanWrapper в классе AllokingJobdetailDetailFactory родительского класса.
Скрипт SQL:-
<em id="__mceDel">-- Table structure `qrtz_blob_triggers`-- CREATE TABLE IF NOT EXISTS `qrtz_blob_triggers` ( `SCHED_NAME` varchar(120) NOT NULL, `TRIGGER_NAME` varchar(120) NOT NULL, `TRIGGER_GROUP` varchar(120) NOT NULL, `BLOB_DATA` blob) Engine = Innodb default charset = utf8mb4; - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------. `Time_zone_id` varchar (80) default null) engine = innodb default charset = utf8mb4; -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `Trigger_name` varchar (120) не null,` trigger_group` varchar (120), а не null, `exance_name` varchar (120), а не null,` fired_time` bigint (13) не null, `grade_time 'Bigint (13) не null,` privity` int (11) не null, `varchar varchar. VARCHAR (120) NULL по умолчанию, `job_group` VARCHAR (120) по умолчанию null,` is_nonconcurrent` varchar (1) null по умолчанию, `requests_recovery` varchar (1) defaul null) ingine = innodb charset = utf8mb4; -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXISTS `qrtz_job_details` (`Chedure_name` varchar (120) не null,` job_name` varchar (120) не null, `job_group` varchar (120), а не null,` description` varchar (250) по умолчанию null, `job_class_name` varchar (250) не null, is_diverse` varchar (1) не null, nut null, не null, nut null, не null, не null, не null. varchar (1) не null, `is_update_data` varchar (1) не null,` requests_recovery` varchar (1) не null, `job_data` blob) engine = innodb default charset = utf8mb4; -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- NULL, `LOCK_NAME` varchar (40) не null) engine = innodb default charset = utf8mb4; -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Engine = Innodb default charset = utf8mb4; - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `Checkin_interval` bigint (13) не null) engine = innodb default charset = utf8mb4; -- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `Trigger_group` varchar (120) не null,` repeat_count` bigint (7) не null, `repeat_interval` bigint (12) не null,` times_triggered` bigint (10) не null) engine = innodb default charset = utf8mb4; -- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- IF NOT EXISTS `QRTZ_SIMPROP_TRIGGERS` (` ched_name` varchar (120) не null, `trigger_name` varchar (120), а не null,` trigger_group` varchar (120) не nul `Str_prop_3` varchar (512) null по умолчанию,` int_prop_1` int (11) по умолчанию null, `int_prop_2` int (11) null по умолчанию,` long_prop_1` bigint (20) default null, `long_prop_2` Bigint (20) Defloak null, null, null, decprop_1 'defimal defimal defromal (null null, null, null, defrop_1`1' defimal (13,11,11). `BOOL_PROP_1` VARCHAR (1) NOULL по умолчанию,` BOOL_PROP_2` VARCHAR (1) по умолчанию NULL) ENGINE = InnoDB по умолчанию charset = utf8mb4; -- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `TRIGGER_GROUP` varchar(120) NOT NULL, `JOB_NAME` varchar(120) NOT NULL, `JOB_GROUP` varchar(120) NOT NULL, `DESCRIPTION` varchar(250) DEFAULT NULL, `NEXT_FIRE_TIME` bigint(13) DEFAULT NULL, `PREV_FIRE_TIME` bigint(13) DEFAULT NULL, `PRIORITY` int(11) DEFAULT NULL, `TRIGGER_STATE` varchar(16) NOT NULL, `TRIGGER_TYPE` varchar(8) NOT NULL, `START_TIME` bigint(13) NOT NULL, `END_TIME` bigint(13) DEFAULT NULL, `CALENDAR_NAME` varchar(200) DEFAULT NULL, `MISFIRE_INSTR` smallint(2) DEFAULT NULL, `JOB_DATA` blob) Engine = Innodb default charset = utf8mb4; --- Индексы для сброшенных таблиц---- Индексы для таблицы `QRTZ_BLOB_TRIGGERS`-Альтер Таблица` QRTZ_BLOB_TRIGGERS` Добавить первичный ключ (`ched_name`,` trigger_name`, `trigger_group`), добавьте ключ` ched_name` (`` `` `)` namerime_rigger_riggroup '), добавьте ключ `ward_name` (` `` `)` trigger_rigroup`), ward_name --- Индексы для таблицы `QRTZ_CALENDARS`-Альтер Таблица` QRTZ_CALENDARS` Добавить первичный ключ (`rade_name`,` calendar_name`); --- Индексы для таблицы `QRTZ_CRON_TRIGGERS`-ALTER TABLE` QRTZ_CRON_TRIGGERS`-ALTER TABLE `QRTZ_CRON_TRIGGERS` Добавить первичный ключ (` rade_name`, `trigger_name`,` trigger_group`); --- Индексы для таблицы `qrtz_fired_triggers`-Альтер Таблица` qrtz_fired_triggers` Добавить первичный ключ (`chard_name`,` intrint_id`), добавьте ключ `idx_qrtz_ft_trig_inst_name` (` chade_name `IDX_QRTZ_FT_INST_JOB_REQ_RCVRY` (` cheding_name`, `exants_name`,` requests_recovery`), добавьте ключ `idx_qrtz_ft_j_g` (` shad_name`, `job_name`,` job_group`), add keep_ qubry_ftz ', job_group`). (`Shard_name`,` job_group`), добавить ключ `idx_qrtz_ft_t_g` (` ched_name`, `trigger_name`,` trigger_group`), добавьте ключ `ydx_qrtz_ft_tg` (` rade_name`, `trigger_group`); --- Индексы для таблицы `QRTZ_JOB_DETAILS`-Альтер Таблица` QRTZ_JOB_DETAILS` Добавить первичный ключ (`ched_name`,` job_name`, `job_group`), добавьте ключ` idx_qrtz_j_req_recovery `Idx_qrtz_j_grp` (` shard_name`, `job_group`); --- Индексы для таблицы `qrtz_locks`-Alter Table` qrtz_locks` Добавить первичную клавишу (`shard_name`,` lock_name`); --- Индексы для таблицы `qrtz_paused_trigger_grps`-Альтер Таблица` qrtz_paused_trigger_grps` Добавить первичную клавишу (`shard_name`,` trigger_group`); --- Индексы для таблицы `QRTZ_SCHEDULER_STATE`-ALTER TABLE` QRTZ_SCHEDULER_STATE` Добавить первичную ключ (`ched_name`,` exance_name`); --- Индексы для таблицы `QRTZ_SIMPLE_TRIGGERS`-Альтер Таблица` QRTZ_SIMPLE_TRIGGERS` Добавить первичный ключ (`ched_name`,` trigger_name`, `trigger_group`); --- Индексы для таблицы `QRTZ_SIMPLE_TRIGGERS`-Альтер Таблица` QRTZ_SIMPLE_TRIGGERS` Добавить первичный ключ (`ched_name`,` trigger_name`, `trigger_group`); --- Индексы для таблицы `qrtz_triggers`-Альтер Таблица` qrtz_triggers` Добавить первичный ключ (`ched_name`,` trigger_name`, `trigger_group`), добавьте ключ` idx_qrtz_t_j` (`chade_name`,` job_name `Idx_qrtz_t_jg` (` grad_name`, `job_group`), добавьте ключ` idx_qrtz_t_c` (`shard_name`,` calendar_name` (191)), добавить ключ `idx_qrtz_t_g` (` `ward_name `Idx_qrtz_t_state` (` grad_name`, `trigger_state`), добавьте ключ` idx_qrtz_t_n_state` (`share_name`,` trigger_name`, `trigger_group`,` trigger_state`), добавить key_qrtz_ttate_tate_tate_tate_tate_tate_tate_tate_tate_tate_tate_tate_tate_ttate (`Shard_name`,` trigger_group`, `trigger_state`), добавить ключ` idx_qrtz_t_next_fire_time` (`ched_name`,` next_fire_time`), добавить ключ `idx_qrtz_nft_st` (` wreate ') `` ydx_qrtz_t_nft_st` (`` `,` wream_tre_try_tr Добавить клавишу `idx_qrtz_t_nft_misfire` (` shard_name`, `misfire_intstr`,` next_fire_time`), добавьте клавишу `idx_qrtz_t_nft_st_misfire` (` shard_name`, `misfire_intstr`,` next_fire ', `ward_name`,` misfire_intstr`, `` `` `` ‘) adgirg_time',` ward_name `Idx_qrtz_t_nft_st_misfire_grp` (` ched_name`, `misfire_instr`,` next_fire_time`, `trigger_group`,` trigger_state`); --- Ограниченные таблицы --- Ограниченные таблицы `QRTZ_BLOB_TRIGGERS`-Альтер Таблица` QRTZ_BLOB_TRIGGERS` Добавить ограничение `QRTZ_BLOB_TRIGGERS_IBFK_1` Foreign Key (` chard_name`, `trigger_name`,` trigger_group`) Ссылки `qrtzzergers (`Shard_name`,` trigger_name`, `trigger_group`); --- Ограниченная таблица `QRTZ_CRON_TRIGGERS`-ALTER TABLE` QRTZ_CRON_TRIGGERS` Добавить ограничение `QRTZ_CRON_TRIGGERS_IBFK_1` Foreign Key (` rade_name`, `trigger_name`,` trigger_group`) Ссылки `QRTZ_TRIGGERS` (ZED_NAME`, nerigger_group`). `Trigger_name`,` trigger_group`); --- Таблица ограничения `QRTZ_SIMPLE_TRIGGERS`-ALTER TABLE` QRTZ_SIMPLE_TRIGGERS` Добавить ограничение `QRTZ_SIMPLE_TRIGGERS_IBFK_1` Foreign Key (` ched_name`, `trigger_name`,` trigger_group`) Ссылка `qrtz_triggers `Trigger_name`,` trigger_group`); --- Ограниченная таблица `QRTZ_SIMPROP_TRIGGERS`-ALTER TABLE` QRTZ_SIMPROP_TRIGGERS` Добавить ограничение `QRTZ_SIMPROP_TRIGGERS_IBFK_1` Foreign Key (` QUED_NAME`, `trigger_name`,` trigger_group`) Ссылки `QRTZ_TRIGMERS ', trigger_name `Trigger_name`,` trigger_group`) ссылки `qrtz_triggers` (` ched_name`, `trigger_name`,` trigger_group`); --- Таблица ограничения `qrtz_triggers`-Альтер таблица` qrtz_triggers` Добавить ограничение `qrtz_triggers_ibfk_1` Иностранный ключ (` grad_name`, job_name`, job_group`) ссылки `QRTZ_JOB_DETALS` (` gob_group`) `Job_group`); <br> <br> <br> </em>
Принцип реализации кварцевого кластера использует базу данных для записи задания поведения, и через механизм блокировки задание запускается только один раз в одно и то же время.
Пример наполнения
// Это необходимо передать на пружину, чтобы управлять @Service ("DialogJob") открытый класс DialogJob {@aUtowired Private Vaustservice Вопросы заслуги; // Имя метода определяется в Quartz public void execute () Throws Exception {// Специальное выполнение бизнес -вопросов. Xxxxx (); }}Суммировать
Вышеуказанное - все содержание этой статьи. Я надеюсь, что содержание этой статьи имеет определенную справочную ценность для каждого обучения или работы. Если у вас есть какие -либо вопросы, вы можете оставить сообщение для общения. Спасибо за поддержку Wulin.com.