Kemampuan Cluster Kuarsa:
Di atas adalah beberapa wawasan pribadi. Mari kita mulai teks utama artikel ini. Artikel ini terutama memperkenalkan konten yang relevan tentang konstruksi kluster Spring Boot + Kuarsa. Ini dibagikan untuk referensi dan pembelajaran Anda. Saya tidak akan mengatakan banyak hal di bawah. Mari kita lihat perkenalan terperinci bersama -sama.
Langkah -langkahnya adalah sebagai berikut:
Konfigurasi Kacang Boot Musim Semi:
@ConfigurationPublic kelas QuartzConfig {@Value ("$ {quartz.scheduler.instancename}") Private String QuartzInstancename; @Value ("$ {org.quartz.datasource.myds.driver}") Private String mydsDriver; @Value ("$ {org.quartz.datasource.myds.url}") Private String mydsuser; @Value ("$ {org.quartz.datasource.myds.password}") Private String mydspassword; @Value ("$ {org.quartz.datasource.myds.maxConnections}") Private String mydsmaxConnections; / ** * Setel properti * @return * @throws IoException */ Private Properties quartzproperties () melempar ioException {properties 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.maxmisfirestoHandleateTime", "1"); prop.put ("org.quartz.jobstore.misfirethreshold", "120000"); prop.put ("org.quartz.jobstore.txisolationlevelserializable", "true"); prop.put ("org.quartz.jobstore.selectwithlocksql", "pilih * dari {0} locks di mana lock_name =? untuk pembaruan"); 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.threadSinHerityContextClassLoaderOfInitializingThread", "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"); prop pengembalian; } @Bean PUBLIK PUBLIKFACTORYBEAN JadwalFactoryBean (@Qualifier ("DialogjoBtrigger") pemicu cronjobtrigger) melempar ioException {schedulerFactoryBean factory = new scedulerFactoryBean (); // Ini memungkinkan untuk memperbarui pemicu di DB saat memperbarui pengaturan dalam file konfigurasi: // digunakan untuk cluster kuarsa, Quartzscheduler memperbarui pekerjaan yang ada saat memulai, sehingga tidak perlu menghapus tabel QRTZ_JOB_Details setelah memodifikasi TargetObject. Catatan yang sesuai dari pabrik.setOverwriteExistingJobs (true); // digunakan untuk cluster kuarsa, muat sumber data kuarsa //factory.setDataSource(dataSource); // Quartzscheduler menunda startup, setelah 10 detik startup aplikasi, Quartzscheduler memulai factory.setstartupdelay (10); // Digunakan untuk cluster kuarsa, muat kuarsa sumber data Configuration factory.setquartzproperties (quartzproperties ()); factory.setAutostartup (true); factory.setApplicationContextSchedulerContextKey ("ApplicationContext"); // Register Trigger factory.setTriggers (cronjobtrigger); <br data-filtered = "filtered"> // gunakan file konfigurasi secara langsung // factory.setConfigLocation (fileSystemResource baru (this.getClass (). GetResource ("/quartz.property"). Pabrik Kembali; } / ** * Memuat pekerjaan * @return * / @bean PROKDetailFactoryBean DiperbaruiialOgstatusJoBdetail () {return createJobDetail (InvokingjoBdetailDetailFactory.class, "updateLialOgstatusGroup", "dialogjob"); }/** * Muat pemicu * @param jobdetail * @return */@bean (name = "dialogjoBtrigger") public crontriggerFactoryBean dialogstatusJobtrigger (@Qualifier ("DialogStatus (0." 0) JobDetail "0) JobDetail (jobdetail) {{return1" 0 (0. "0 0) JOBDETAIL" 0) JOBDETAIL JOBDETAIL (JOBDETAIL) {returner1 "0/{returner1" 0 (0/{returner1 "0 0) {return1" 0/{{{{{{ @{{ @{return) {return ("jobdetail" {lojoil " } / ** * Buat pabrik pekerjaan * @param jobclass * @param groupName * @param targetObject * @return * / private static jobDetailFactoryBean createJoBdetail (class <?> Jobclass, string groupName, string targetObject) {jobdetailFactoryBean factorybean = jobdetail (jobdetaile) {jobdetailFactoryBean factorybean = jobdetailbeAndeBeTeail (jobdetaile (loChAncoryBeanBeanBeanBean = jobdetail (lojdetail (loChAcoryBeanBeanBeanBean = jobdetaDe (loactacorybeanBeanBean = jobdetail (loelbeAr) factorybean.setjobclass (jobclass); factorybean.setDurability (true); factorybean.setRequestSrecovery (true); factorybean.setgroup (groupName); Peta <string, string> peta = new HashMap <> (); Map.put ("TargetObject", TargetObject); Map.put ("TargetMethod", "Execute"); factorybean.setjobdatamap (peta); mengembalikan pabrik; } / ** * Buat pabrik pemicu * @param jobdetail * @param cronexpression * @return * / private static contrigriggerFactoryBean dialogstatustrigger (jobdetail jobdetail, string cronexpression) {crontriggerFactoryBean factorybean = new crontriggerFactory factorybean.setjobdetail (jobdetail); factorybean.setCronexpression (cronexpression); mengembalikan pabrik; }}InvokingJoBdetailDetailFactory Object:
Kelas publik InvokingJoBdetailDetailFactory meluas Quartzjobbean {// kelas di mana tugas yang dijadwalkan terletak pribadi string targetObject; // tugas yang dijadwalkan spesifik perlu dieksekusi target string pribadi; Private ApplicationContext CTX; @Override Protected Void ExecuteInternal (Konteks JobExecutionContext) melempar JobExecutionException {coba {objek oargetObject = ctx.getBean (targetObject); Metode m = null; coba {m = oargetObject.getClass (). getMethod (targetMethod); M.Invoke (OtargetObject); } catch (SecurityException e) {E.PrintStackTrace (); } catch (nosuchmethodeException e) {e.printstacktrace (); }} catch (Exception e) {lempar JobExecutionException baru (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; }}CATATAN: Metode set tidak boleh hilang. ApplicationContext dalam setApplicationContext terkait dengan nilai yang diisi di factory.setApplicationContextSchedulerContextKey ("ApplicationContext"). Prinsip ini diimplementasikan oleh Beanwrapper di kelas Parent InvokingJoBdetailDetailFactory.
SCRIPT SQL:-
<em id = "__ mcedel">- struktur tabel `qrtz_blob_triggers`-- buat tabel jika tidak ada` qrtz_blob_triggers` (`sced_name` varchar (120) nol,` trigger_name` varchar (120) tidak nol, `trigger` trigger_name 'varchar (120) bukan nol, `trigger` triggroup) (120) tidak nol, `` triggroup `trigger_name (120) tidak nol,` `nol) nol (120) tidak nol,` nol) Engine = innodb default charset = utf8mb4; - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `Time_zone_id` varchar (80) default null) engine = innodb default charset = utf8mb4; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ `Trigger_name` varchar (120) bukan null,` trigger_group` varchar (120) bukan null, `instance_name` varchar (120) bukan nol,` dipecat_time` bigint (13) bukan null, `sched_time 'bigint (13) not nol,` priority `no prior` not null, `null` not null `not null` not null, `noLM,` noLOM, `nol` nol `nol` nol ` varchar (120) default null, `job_group` varchar (120) null default,` is_nonconcurrent` varchar (1) default null, `requests_recovery` varchar (1) engine null) = innodb default charset = utf8mb4; -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- (`Sced_name` varchar (120) bukan null,` job_name` varchar (120) bukan null, `job_group` varchar (120) bukan null,` description` varchar (250) default null, `job_class_name` varchar (250) tidak nol,` varcon` null 'null' nuller 'nuller' null `null` null `null` null `null` null `null` null `null` null `null` null `null` null `null` null `null` null `null` null `null` null ' varchar (1) bukan null, `is_update_data` varchar (1) bukan nol,` requests_recovery` varchar (1) bukan nol, `job_data` gumpalan) mesin = innoDB charset default = utf8mb4; ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- varchar (40) not null) engine = innodb charset default = utf8mb4; -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Engine = innodb default charset = utf8mb4; - ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `Checkin_interval` bigint (13) not null) engine = innodb default charset = utf8mb4; -- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `Trigger_group` varchar (120) bukan null,` ulangi_count` bigint (7) bukan nol, `ulangi_interval` bigint (12) bukan nol,` times_triggered` bigint (10) bukan null) engine = innodb default charset = utf8mb4; ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ `qrtz_simprop_triggers` ( `SCHED_NAME` varchar(120) NOT NULL, `TRIGGER_NAME` varchar(120) NOT NULL, `TRIGGER_GROUP` varchar(120) NOT NULL, `STR_PROP_1` varchar(512) DEFAULT NULL, `STR_PROP_2` varchar(512) DEFAULT NULL, `Str_prop_3` varchar (512) default null,` int_prop_1` int (11) default null, `int_prop_2` int (11) nol default,` long_prop_1` bigault (20) default null, long_prop_2` bigint (20), `long_prop_` `` `` `` `` `` `long_prop_` `Bool_prop_1` varchar (1) default null,` bool_prop_2` varchar (1) null) engine = innodb default charset = utf8mb4; -- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `Trigger_group` varchar (120) bukan null,` job_name` varchar (120) bukan null, `job_group` varchar (120) bukan null,` description` varchar (250) nol, `next_fire_time (13) Default null,` prion `prion` `prion` `bigl null` `bigt` `deFault (13) 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; ' (`Sced_name`,` trigger_name`, `trigger_group`); --- Indeks untuk Tabel `qrtz_calendars`-tabel alter` qrtz_calendars` Tambahkan kunci primer (`sched_name`,` calendar_name`); --- Indeks untuk Tabel `qrtz_cron_triggers`-tabel alter` qrtz_cron_triggers`-tabel alter `qrtz_cron_triggers` Tambahkan kunci primer (` sched_name`, `trigger_name`,` trigger_group`); --- Indeks untuk Tabel `qrtz_fired_triggers`-tabel alter` qrtz_fired_triggers` Tambahkan kunci primer (`sced_name`,` entry_id`), tambahkan kunci `idx_qrtz_ft_trig_inst_name` (` sced_name`, `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `Idx_qrtz_ft_inst_job_req_rcvry` (` sched_name`, `instance_name`,` requests_recovery`), tambahkan kunci `idx_qrtz_ft_j_g` (` sched_name`, `` job_name, `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` ` (`SCHED_NAME`,`JOB_GROUP`), ADD KEY `IDX_QRTZ_FT_T_G` (`SCHED_NAME`,`TRIGGER_NAME`,`TRIGGER_GROUP`), ADD KEY `IDX_QRTZ_FT_TG` (`SCHED_NAME`,`TRIGGER_GROUP`); --- Indeks untuk Tabel `qrtz_job_details`-tabel alter` qrtz_job_details` Tambahkan kunci primer (`sched_name`,` job_name`, `job_group`), tambahkan kunci` idx_qrtz_j_req_recovery (`` `` `` `` `` `` `` `` ` `Idx_qrtz_j_grp` (` sched_name`, `job_group`); --- Indeks untuk Tabel `qrtz_locks`-tabel alter` qrtz_locks` Tambahkan kunci primer (`sched_name`,` lock_name`); --- INDEKS UNTUK TABEL `qRTZ_PAUSE_TRIGGER_GRPS`-Tabel Alter` qrtz_paused_trigger_grps` Tambahkan kunci primer (`sced_name`,` trigger_group`); --- Indeks untuk Tabel `qrtz_scheduler_state`-tabel alter` qrtz_scheduler_state` Tambahkan kunci primer (`sched_name`,` instance_name`); --- Indeks untuk Tabel `qrtz_simple_triggers`-tabel alter` qrtz_simple_triggers` Tambahkan kunci primer (`sched_name`,` trigger_name`, `trigger_group`); --- Indeks untuk Tabel `qrtz_simple_triggers`-tabel alter` qrtz_simple_triggers` Tambahkan kunci primer (`sched_name`,` trigger_name`, `trigger_group`); --- Indeks untuk Tabel `qrtz_triggers`-tabel alter` qrtz_triggers` Tambahkan kunci primer (`sched_name`,` trigger_name`, `trigger_group`), tambahkan kunci` idx_qrtz_t_j` (`scred_name,` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `IDX_QRTZ_T_JG` (`SCHED_NAME`,`JOB_GROUP`), ADD KEY `IDX_QRTZ_T_C` (`SCHED_NAME`,`CALENDAR_NAME`(191)), ADD KEY `IDX_QRTZ_T_G` (`SCHED_NAME`,`TRIGGER_GROUP`), ADD KEY `IDX_QRTZ_T_STATE` (` SCHECTER_NAME`, `trigger_state`), tambahkan tombol` idx_qrtz_t_n_state` (`sched_name`,` trigger_name`, `trigger_group`,` trigger_state`), add `ID` TRIGGER_TZ_TZ_TZ_TZ_TZ_TZ_TZ_TZ_TZ_TZ_TZ_TAT.) (`SCHED_NAME`,`TRIGGER_GROUP`,`TRIGGER_STATE`), ADD KEY `IDX_QRTZ_T_NEXT_FIRE_TIME` (`SCHED_NAME`,`NEXT_FIRE_TIME`), ADD KEY `IDX_QRTZ_T_NFT_ST` (`SCHED_NAME`,`TRIGGER_STATE`,`NEXT_FIRE_TIME`), Tambahkan Kunci `idx_qrtz_t_nft_misfire` (` sced_name`, `misfire_instr`,` next_fire_time`), tambahkan kunci `idx_qrtz_t_nft_st_st_st_st_t_misfire` (` sched_name`, `misfire_instry,` `` `` `` `` `` `` `` `` `` `` `` `` `` `` `next. `IDX_QRTZ_T_NFT_ST_MISFIRE_GRP` (` sced_name`, `misfire_instr`,` next_fire_time`, `trigger_group`,` trigger_state`); --- Batas Tabel yang Diekspor --- Batas Tabel `qrtz_blob_triggers`-Tabel Alter` qrtz_blob_triggers` Tambahkan kendala `qrtz_blob_triggers_ibfk_1` Kunci asing (` scred_name`, `` `` `` `` `` `` `` `` `` `` `` `` `` ` (`Sced_name`,` trigger_name`, `trigger_group`); --- Limit table `qrtz_cron_triggers`--ALTER TABLE `qrtz_cron_triggers` ADD CONSTRAINT `qrtz_cron_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `TRIGGER_NAME`, `TRIGGER_GROUP`) REFERENCES `qrtz_triggers` (`SCHED_NAME`, `Trigger_name`,` trigger_group`); --- Tabel pembatasan `qrtz_simple_triggers`-tabel alter` qrtz_simple_triggers` Tambahkan kendala `qrtz_simple_triggers_ibfk_1` Key (` sced_name`, `trigger_name`,` trigger_ `` `` `trigger` `trigger` `trigger` `trigger` trigger `` trigger `` trigger `trigger` trigger `trigger` trigger `trigger` trigger `trigger` trigger `trigger` trigger `trigger` trigger `trigger` trigger `trigger` trigger `trigger` trigger `trigger` trigger `trigger` trigger ` `Trigger_name`,` trigger_group`); --- Tabel Batas `qrtz_simprop_triggers`-tabel alter` qrtz_simprop_triggers` Tambahkan kendala `qrtz_simprop_triggers_ibfk_1` Key asing (` screctz), `trigger_name`,` trigger_tz `trigger` trigger `trigger`, `trigger_name (`Sced_name`,` trigger_name`, `trigger_group`) Referensi` qrtz_triggers` (`sched_name`,` trigger_name`, `trigger_group`); --- Restriction table `qrtz_triggers`--ALTER TABLE `qrtz_triggers` ADD CONSTRAINT `qrtz_triggers_ibfk_1` FOREIGN KEY (`SCHED_NAME`, `JOB_NAME`, `JOB_GROUP`) REFERENCES `qrtz_job_details` (`SCHED_NAME`, `JOB_NAME`, `Job_group`); <br> <br> <br> </em>
Prinsip implementasi cluster kuarsa menggunakan database untuk merekam perilaku pekerjaan, dan melalui mekanisme kunci, pekerjaan dijalankan hanya sekali dalam waktu yang sama.
Contoh Jobbean
// Perlu diserahkan kepada Spring untuk mengelola @Service ("DialogJob") dialogjob kelas publik {@Autowired Private QuestionService QuestionService; // Nama metode didefinisikan dalam kuarsa public void execute () melempar pengecualian {// Eksekusi spesifik dari Business QuestionService.XXXX (); }}Meringkaskan
Di atas adalah seluruh konten artikel ini. Saya berharap konten artikel ini memiliki nilai referensi tertentu untuk studi atau pekerjaan semua orang. Jika Anda memiliki pertanyaan, Anda dapat meninggalkan pesan untuk berkomunikasi. Terima kasih atas dukungan Anda ke wulin.com.