석영 클러스터 기능 :
위의 것은 개인적인 통찰력입니다. 이 기사의 본문을 시작합시다. 이 기사는 주로 Spring Boot + Quartz 클러스터의 구성에 관한 관련 내용을 소개합니다. 참조와 학습을 위해 공유됩니다. 나는 아래에서 많이 말하지 않을 것입니다. 자세한 소개를 함께 살펴 보겠습니다.
단계는 다음과 같습니다.
스프링 부트 빈 구성 :
@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.maxConnection}") 개인 문자열 mydsmaxConnections; / ** * 속성 설정 * @return * @throws ioException */ private 속성 QuartzProperties ()는 ioexception {properties proper = 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} lekes where 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 schedulerfactorybean schedulerfactorybean (@qualifier ( "dialogjobtrigger") trigger cronjobtrigger) ioexception {schedulerfactorybean factory = new schedulerfactorybean (); // 구성 파일에서 설정을 업데이트 할 때 DB에서 트리거를 업데이트 할 수 있습니다. // Quartz Cluster에 사용 된 QuartzScheduler는 시작시 기존 작업을 업데이트하므로 대상 바닥을 수정 한 후 QRTZ_JOB_DETAILS 테이블을 삭제할 필요가 없습니다. 공장의 해당 레코드. // Quartz 클러스터,로드 쿼츠 데이터 소스 //factory.setdatasource(datasource)에 사용됩니다. // QuartzScheduler가 시작되는 시작, 10 초의 응용 프로그램 시작 후 Quartzscheduler는 팩토리를 시작합니다. SetStartUpdelay (10); // Quartz Cluster, Load Quartz Data Source Configuration factory.setquartzproperties (QuartzProperties ()); Factory.SetAutosTartup (True); factory.setApplicationContexTschedulerContextKey ( "ApplicationContext"); // register trigger factory.settriggers (cronjobtrigger); <br data-filtered = "필터링"> // 구성 파일을 직접 사용 // factory.setystemresource (this.get.getClass (). getResource ( "/Quartz.properties"); 반품 공장; } / ** * 작업로드 * @return * / @bean public detailfactorybean updateialogstatusjobdetail () {return createjobdetail (invokingjobdetailDetailFactory.class, "updatedialogStatusGroup", "dialogjob"); }/** * 트리거 * @param jobDetail * @return */@bean (name = "dialogjobtrigger") public crontriggerFactoryBean DINGSTATUSJOBTRIGGER (@Qualifier ( "updateDialogStatusJobDetail") jobDetail jobDetail) {return DialogStattigger (jobDeteaLe, "); } / ** * 작업 공장 생성 * @param jobclass * @param groupname * @param targetObject * @return * / private static jobDetailFactoryBean CreateJobDetail (class <?> jobClass, String GroupName, String TargetObject) {jobDetailectoryBean FactoryBean = NewDetailFactoryBean (); FactoryBean.setJobclass (JobClass); FactoryBean.setderability (true); FactoryBean.SetRequestSrecovery (True); FactoryBean.SetGroup (GroupName); map <string, string> map = new Hashmap <> (); map.put ( "targetObject", targetObject); map.put ( "TargetMethod", "Execute"); FactoryBean.setJobdataasmap (지도); 팩토리 앤 리턴; } / ** * 트리거 공장 생성 * @param jobDetail * @param cronexpression * @return * / private static crontriggerfactorybean dialogstatustrigger (jobDetail jobDetail, String cronexpression) {crontrigger ActoryBean = New CrontriggerFactoryBean (); FactoryBean.setJobdetail (jobDetail); FactoryBean.SetCronexpression (cronexpression); 팩토리 앤 리턴; }}jobdetaildetailfactory 객체 venking
공개 클래스 호출 jobdetailDetailFactory QuartzJobbean {// 예정된 작업이 개인 문자열 targetObject에 위치한 클래스; // 특정 예정된 작업을 실행해야합니다. 비공개 문자열 대상 메드; Private ApplicationContext CTX; @override protected void executeInternal (jobExecutionContext Context) 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 (예외 e) {throw new jobExecutionException (e); }} public void setApplicationContext (ApplicationContext ApplicationContext) {this.ctx = ApplicationContext; } public void settargetObject (String targetObject) {this.targetObject = targetObject; } public void settArgetMethod (String targetMethod) {this.targetMethod = TargetMethod; }}참고 : 설정 메소드가 누락되지 않아야합니다. setApplicationContext의 ApplicationContext는 Factory.setApplicationContexTschedUlerConTextKey ( "ApplicationContext")와 관련이 있습니다. 원칙은 invokdetailDetailFactory 상위 클래스에서 BeanWrapper에 의해 구현됩니다.
SQL 스크립트 :-
<em id = "__ mcedel">- 테이블 구조`QRTZ_BLOB_TRIGGERS`-- 존재하지 않으면 테이블 작성`qrtz_blob_triggers` (`sched_name` varchar (120) null,`trigger_name 'varchar (120) null,`blob _`blob _``blob _``trigger_data (120)``trigger_group') 엔진 = innodb 기본 charset = utf8mb4; - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `time_zone_id` varchar (80) 기본 null) 엔진 = innodb 기본 charset = utf8mb4; -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `trigger_name` varchar (120) varchar (120), null,`trigger_group` varchar (120) varchar (120) null,`instance_name` varchar (120)가 null,`fired_time` bigint (13) not null,`sched_time` bigint (13) not nont` hull,`nont null,`nont null,`sched_time 'bigint (13) not em noll,```biged'bigint (13)가 아닙니다. varchar (120) 기본 null,`job_group` varchar (120) 기본 null,`is_nonconcurrent` varchar (1) default null,`requests_recovery` varchar (1) 기본 null) 엔진 = innodb default charset = utf8mb4; -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXISTS `qrtz_job_details` (`sched_name` varchar (120) not null,`job_name` varchar (120) null,`job_group` varchar (120) null,`description` varchar (250) 기본 null,`job_class_name` varchar (250)가 아닌 varchar (1) is_dural (1) nonull, em null,`is_durable ' varchar (1) null,`is_update_data` varchar (1) null,`requests_recovery` varchar (1) null,`job_data` blob) 엔진 = innodb default charset = utf8mb4; -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- NULL, `LOCK_NAME` varchar (40) null not null) 엔진 = innodb 기본 charset = utf8mb4; -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 엔진 = innodb 기본 charset = utf8mb4; - --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `checkin_interval 'bigint (13) null null) 엔진 = innodb 기본 charset = utf8mb4; -- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `trigger_group` varchar (120) NOL NOT NULL,`REPITE_COUNT` BIGINT (7) NOL NOT NULL,`REPITE_INTERVAL` BIGINT (12) NOT NULL,`Times_Triggered (10) NOT NULL NOT NULL) ENGINE = InnodB Default Charset = UTF8MB4; -- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- IF NOT EXISTS `qrtz_simprop_triggers` (`sched_name` varchar (120)가 null,`trigger_name` varchar (120) null,`trigger_group` varchar (120) null, null,`str_prop_1` varchar (512) 기본 널,`str_prop_2` default null,`str_prop_2` `str_prop_3` varchar (512) 기본 null,`int_prop_1` int (11) 기본 null,`int_prop_2` int (11) default null,`long_prop_1` bigint (20) default null,`long_prop_2` big inult (20) default null,`dec_prop_1 'decimal (13,4), 4). `bool_prop_1` varchar (1) Default Null,`bool_prop_2` varchar (1) 기본 null) 엔진 = innodb default charset = utf8mb4; -- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `trigger_group` varchar (120) varchar (120) NOT NULL,`job_name` varchar (120) 널 null,`job_group` varchar (120) null,`description` varchar (250) 기본 null,`next_fire 'bigint (13) Default Null,`prev_teimin'(13) default null, 'prevation null,`default``default'(13). `trigger_state` varchar (16) not null,`trigger_type` varchar (8) varchar (8) not null,`start_time` bigint (13) null,`end_time` bigint (13) default null,`calendar_name` varchar (200) default null,`defiult 'smallint (2) default'null,`` 기본 charset = utf8mb4; --- 덤프 테이블에 대한 색인 --- 테이블`qrtz_blob_triggers`에 대한 인덱스 ------ 테이블`qrtz_blob_triggers 'add`qrtz_blob_triggers'add drimary key (`sched_name`,`trigger_name`),`trigger_group '), key``trigger_name'(`scell_name`),`trigger _); --- 테이블`qrtz_calendars`에 대한 색인-Alter Table`QRTZ_CALENDARS '기본 키 추가 (`sched_name`,`calendar_name`); --- 테이블`QRTZ_CRON_TRIGGERS`에 대한 인덱스-ALTER 테이블`QRTZ_CRON_TRIGGERS`-- ALTER TABLE 'QRTZ_CRON_TRIGGERS` QRTZ_CRON_TRIGGERS'기본 키 추가 (`sched_name`, 'trigger_name',`trigger_group '); --- 테이블`qrtz_fired_triggers`에 대한 인덱스-Alter 테이블`qrtz_fired_triggers` 기본 키 추가 (`sched_name`,`eptor_id`), key`idx_qrtz_ftz_trig_inst_name` (`scell_name`,```instance_name`) `idx_qrtz_ft_ft_nst_job_req_rcvry` (`sched_name`,`instance_name`,`requests_recovery`), key`idx_qrtz_ft_j_g` (`sched_name`, job_name`,`job_group`), key`idx_qrtz _ (`sched_name`,`job_group`), key`idx_qrtz_ft_t_g` (`sched_name`,`trigger_name`,`trigger_group`)을 추가하십시오. key`idx_qrtz_ft_t '(`sched_name`,`trigger_group`); --- 테이블의 색인`qrtz_job_details`---------- 테이블`qrtz_job_details` alter table`qrtz_job_details 'addrican key (`sched_name`,`job_name`,`job_group`), key`idx_qrtz_j_req_recovery` (``````chey' ',``````job_group' '),````job_group') 기본 키 (`sched_name`,`job_group`)을 추가하십시오. `idx_qrtz_j_grp` (`sched_name`,`job_group '); --- 테이블`qrtz_locks`에 대한 색인-Alter Table` QRTZ_LOCKS` 기본 키 추가 (`sched_name`,`lock_name`); --- 테이블의 색인`qrtz_paused_trigger_grps`-- ALTER TABLE` QRTZ_PAUSED_TRIGGER_GRPS` 기본 키 추가 (`sched_name`,`trigger_group '); --- 테이블`qrtz_scheduler_state`에 대한 색인-agter 테이블`qrtz_scheduler_state` 기본 키 추가 (`sched_name`, 'instance_name`); --- 테이블`qrtz_simple_triggers`에 대한 색인-agter 테이블`qrtz_simple_triggers '기본 키 추가 (`sched_name`,`trigger_name`,`trigger_group`); --- 테이블`qrtz_simple_triggers`에 대한 색인-agter 테이블`qrtz_simple_triggers '기본 키 추가 (`sched_name`,`trigger_name`,`trigger_group`); --- 테이블`qrtz_triggers`에 대한 색인-Alter Table`qrtz_triggers` 기본 키 (`sched_name`,`trigger_name`,`trigger_group`), key`idx_qrtz_t_j` (`sched_name`, job_name`,`job_name`),`job_name`) `idx_qrtz_t_jg` (`sched_name`,`job_group`), key`idx_qrtz_t_t_t_c` (`sched_name`,`calendar_name` (191)))를 추가하십시오, 키`idx_qrtz_t_g` (`scell_name`) `idx_qrtz_t_state` (`sched_name`, 'trigger_state`), key`idx_qrtz_t_n_state` (`sched_name`,`trigger_name`,`trigger_group`,`trigger_state`),`idx_qrtz_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt_nt _ ad key``trigger_name`)을 추가하십시오 (`sched_name`,`trigger_group`,`trigger_state`), key`idx_qrtz_t_next_fire_tife '(`sched_name`,`next_fire_time`)을 추가하십시오. key key`idx_qrtz_t_nft_st` `idx_qrtz_t_nft_misfire` (`sched_name`,`mistife_instr`,`next_fire_time`), key`idx_qrtz_t_nft_st_misfire` (`sched_name`,`missfire_inst_t_st_st_misfire` (`sched_name`,`next_fire`) `idx_qrtz_t_nft_st_misfire_grp` (`sched_name`, 'mistife_inst`,`next_fire_time`,`trigger_group`,`trigger_state`); --- 제한 내보내기 테이블 --- 제한 테이블`qrtz_blob_triggers`---- aLter 테이블`QRTZ_BLOB_TRIGGERS`QRTZ_BLOB_TRIGGERS_IBFK_1` 외국 키 (`sched_name`,`trigger_name`,`trigger ')``qrtz_trger'). (`sched_name`,`trigger_name`,`trigger_group '); --- 제한 테이블`QRTZ_CRON_TRIGGERS`-- aLTER 테이블`QRTZ_CRON_TRIGGERS` QRTZ_CRON_TRIGGERS_IBFK_1`2ISTAINT`QRTZ_CRON_TRIGGERS_IBFK_1`2ISTAINT``sched_name '',`trigger_name`,`trigger_group`) 참조`qrtz _ (`QRTZ ',`QRTZ', 'QRTZ' `trigger_name`,`trigger_group '); --- 제한 테이블`QRTZ_SIMPLE_TRIGGERS`-ALTER TABLE`QRTZ_SIMPLE_TRIGGERS 'ADD ADD ADD`QRTZ_SIMPLE_TRIGGERS_IBFK_1`2IENTIAL ('sched_name ',`trigger_name`,'trigger_group ') 참조`qrtz_trger'). (`sched_name`,`trigger_name`,`trigger_group '); --- 제한 테이블`QRTZ_SIMPROP_TRIGGERS`--- aLTER 테이블`QRTZ_SIMPROP_TRIGGERS` add 제약`qrtz_simprop_triggers_ibfk_1`oxist 키 (`sched_name ',`trigger_name`,`trigger_group`) 참조`qrtz_trger'). (`sched_name`,`trigger_name`,`trigger_group ') 참조`qrtz_triggers` (`sched_name`,`trigger_name`,`trigger_group'); --- 제한 테이블`qrtz_triggers`-- Alter 테이블`qrtz_triggers`는 제약 조건`qrtz_triggers_ibfk_1`oxior key (`sched_name`,`job_name`)를 추가합니다. `job_group`); <br> <br> <br> </em>Quartz Cluster의 구현 원리는 데이터베이스를 사용하여 작업 동작을 기록하며 잠금 장치를 통해 작업은 동시에 한 번만 실행됩니다.
Jobbean 예
// @service ( "dialogjob") 공개 클래스 dialogjob {@autowired private QuestionService QuestionsErvice; // 메소드 이름은 Quartz public void execute ()에 정의되어 {// 비즈니스 QuestionService.xxxxx ()에 정의되어 있습니다. }}요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.