Quartzクラスター機能:
上記はいくつかの個人的な洞察です。この記事のメインテキストを始めましょう。この記事では、主にスプリングブート +クォーツクラスターの構築に関する関連コンテンツを紹介します。参照と学習のために共有されます。以下ではあまり言いません。詳細な紹介を一緒に見てみましょう。
手順は次のとおりです。
Spring Boot Bean構成:
@configurationpublic class 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; / ** * Properties * @return * @throws ioexception */ private Properties quartzproperties()throws 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.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 where lock_name =?for update"); 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.threadsinheritcontextclassloassolofiNitializingthread"、 "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")トリガーcronjobtrigger)ioexception {schedulerfactorybean factory = new SchedulerFactoryBean(); //これにより、設定の設定を更新するときにDBのトリガーを更新できます。Quartzクラスターに使用されるQuartzschedulerは、既存のジョブを起動時に更新するため、QRTZ_JOB_DETAILSテーブルをターゲットオーブフォームを変更した後に削除する必要はありません。 Factory.SetOverWriteExistingJobsの対応する記録(True); // Quartzクラスターに使用される、Quartzデータソースをロード//Factory.setDataSource(DataSource); // Quartzschedulerはスタートアップを遅らせ、10秒のアプリケーションスタートアップの後、QuartzschedulerがFactory.setstartupdelay(10)を開始します。 // Quartzクラスターに使用される、Quartzデータソース構成Factory.setQuartzProperties(QuartzProperties())をロードします。 Factory.setautostartup(true); Factory.SetApplicationContextSchedulerContextkey( "ApplicationContext"); // trigger factory.settrigger(cronjobtrigger); <br data-filtered = "filtered"> //構成ファイルを直接使用// factory.setConfiglocation(this.getClass()。ファクトリーを返します。 } / ** *ロードジョブ * @return * / @bean publicdetailfactorybean updatedialogstatusjobdetail(){return createjobdetail(invokingjobdetaildetailfactory.class、 "updatedialogstatusgroup"、 "dialogjob"); }/** *トリガーをロード * @param jobdetail * @return */@bean(name = "dialogjobtrigger")public crontriggerfactorybean dialogstatusjobtrigger( @qualifier( "updatedialogstatusjobdetail")jobdetail jobdetail ? "); } / ** * Job Factory * @Param JobClass * @Param GroupName * @Param TargetObject * @return * / private static jobdetailfactorybean createjobdetail(class <?> jobclass、string groupName、String targetObject){jobdetailfactorybean factorybean = new jobdetailfactoryfacefactbeantbean 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); FactoryBeanを返します。 } / ** *トリガーファクトリーを作成 * @param jobdetail * @param cronexpression * @return * / private static crontriggerfactorybean dialogstatustrigger(jobdetail jobdetail、string cronexpression){crontriggerfactorybean factorybean = new crontriggerfactorybean(); Factorybean.setJobdetail(JobDetail); Factorybean.setcronexpression(Cronexpression); FactoryBeanを返します。 }}InvokingJobDetailDetailFactoryオブジェクト:
パブリッククラスInvokingJobdetaildetailFactoryはQuartzJobbeanを拡張します{//スケジュールされたタスクがプライベートストリングターゲットオブジェクトに配置されているクラス。 //特定のスケジュールされたタスクを実行する必要があります。 Private ApplicationContext CTX; @Override Protected void executeInternal(jobexecutioncontextコンテキスト)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){新しいJobeExeCutionException(e); }} public void setApplicationContext(applicationContext ApplicationContext){this.ctx = applicationContext; } public void settargetObject(string targetobject){this.targetObject =ターゲットオーブジェクト; } public void settargetMethod(String TargetMethod){this.targetMethod = targetMethod; }}注:設定されたメソッドが欠落してはなりません。 SetApplicationContextのApplicationContextは、Factory.SetApplicationContextSchedulerContextey( "ApplicationContext")に記入された値に関連しています。この原則は、InvokingJobdetaildetailFactory Parent ClassのBeanWrapperによって実装されています。
SQLスクリプト: -
<em id = "__ mcedel"> - テーブル構造 `qrtz_blob_triggers`--存在しない場合はテーブルを作成します` qrtz_blob_triggers`( `sched_name` varchar(120)not null、` trigger_name` varchar(120) blob)エンジン= innodbデフォルトcharset = utf8mb4; - ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `time_zone_id` varchar(80)デフォルトnull)エンジン= innodbデフォルトcharset = utf8mb4; -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `trigger_name` varchar(120)null、` trigger_group` varchar(120)not null、 `instance_name` varchar(120)null、` fired_time` bigint(13)null、 `sched_time` bigint(13)not null、` pryity` int(11)not not(11) `job_name` varchar(120)デフォルトnull、` job_group` varchar(120)デフォルトnull、 `is_nonconcurrent` varchar(1)デフォルトnull、` requests_recovery` varchar(1)default null)エンジン= innodbデフォルトcharset = utf8mb4; -- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- EXISTS `qrtz_job_details` ( `sched_name` varchar(120)null、` job_name` varchar(120)not null、 `job_group` varchar(120)not null、` description` varchar(250)default null、 `job_class_name` varchar(250)not null、` is_null、 varchar(1)not null、 `is_update_data` varchar(1)not null、` requests_recovery` varchar(1)not null、 `job_data` blob)エンジン= innodbデフォルトcharset = utf8mb4; -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- NULL, `LOCK_NAME` varchar(40)null)エンジン= innodbデフォルトcharset = utf8mb4; -- ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- Engine = InnoDBデフォルトcharset = utf8mb4; - --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `checkin_interval` bigint(13)not null)エンジン= innodbデフォルトcharset = utf8mb4; -- ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `trigger_group` varchar(120)null、` repeat_count` bigint(7)not null、 `repeat_interval` bigint(12)not null、` times_triggered` bigint(10)not null)エンジン= innodbデフォルトcharset = utf8mb4; -- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- IF NOT EXISTS `qrtz_simprop_triggers`(` sched_name` varchar(120)not null、 `trigger_name` varchar(120)null、` trigger_group` varchar(120)null、 `str_prop_1` varchar(512)default null、` str_prop_2` varchar(512) `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)デフォルトnull、` dec_prop_1`デシマー(13,4) `bool_prop_1` varchar(1)デフォルトnull、` bool_prop_2` varchar(1)default null)エンジン= innodbデフォルトcharset = utf8mb4; -- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- `trigger_group` varchar(120)null、` job_name` varchar(120)not null、 `job_group` varchar(120)not null、` description` varchar(250)default null、 `next_fire_time` bigint(13)デフォルトnull、` prevfire_fire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_pire_time `bigint(13) `trigger_state` varchar(16)null、` trigger_type` varchar(8)not null、 `start_time` bigint(13)not null、` end_time` bigint(13)デフォルトnull、 `calendary_name` varchar(200)デフォルトnull、` misfire_ defaillint(2)defantrint(2)defantrint(2) charset = utf8mb4; ---ダンプされたテーブルのインデックス----テーブルのインデックス `qrtz_blob_triggers` - alter table` qrtz_blob_triggers`追加プライマリキー( `sched_name`、` trigger_name`、 `trigger_group`)、キー` sched_name`の追加( `sched_name`、` trigger_name`、 `trigger_group`); ---テーブルのインデックス `qrtz_calendars` - alter table` qrtz_calendars`追加プライマリキー( `sched_name`、` calendar_name`); ---テーブルのインデックス `qrtz_cron_triggers` - alter table` qrtz_cron_triggers` - alter table `qrtz_cron_triggers`追加プライマリキー(` sched_name`、 `trigger_name`、` trigger_group`); ---テーブルのインデックス `qrtz_fired_triggers` - alter table` qrtz_fired_triggers`プライマリキー( `sched_name`、` entry_id`)を追加し、キーを追加`idx_qrtz_ft_inst_job_req_rcvry`(` sched_name`、 `instance_name`、` requests_recovery`)、key `idx_qrtz_j_g`( `sched_name`、` job_name`、 `job_group' ( `sched_name`、` job_group`)、key `idx_qrtz_ft_t_g`(` sched_name`、 `trigger_name`、` trigger_group`)を追加し、キー `idx_qrtz_ft_tg`(` sched_name`、 `trigger_group`)を追加します。 ---テーブルのインデックス `qrtz_job_details` - alter table` qrtz_job_details`プライマリキー( `sched_name`、` job_name`、 `job_group`)、追加キー` idx_qrtz_j_req_recoverya( `sched_name` requests_ recimageのリクエスト`) `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` - alter table` qrtz_scheduler_state `追加プライマリキー(` sched_name`、 `instance_name`); ---テーブルのインデックス `qrtz_simple_triggers` - alter table` qrtz_simple_triggers`追加プライマリキー( `sched_name`、` trigger_name`、 `trigger_group`); ---テーブルのインデックス `qrtz_simple_triggers` - alter table` qrtz_simple_triggers`追加プライマリキー( `sched_name`、` trigger_name`、 `trigger_group`); ---テーブルのインデックス `qrtz_triggers` - alter table` qrtz_triggers`はプライマリキーを追加します( `sched_name`、` trigger_name`、 `trigger_group`)、キーを追加します。 `idx_qrtz_t_jg`(` sched_name`、 `job_group`)、key` idx_qrtz_t_c`( `sched_name`、` calendar_name`(191))、key `idx_qrtz_t_t_g`( `idx_qrtz_t_state`(` sched_name`、 `trigger_state`)、key` idx_qrtz_t_n_state`( `sched_name`、` trigger_name`、 `trigger_group`、` trigger_state `)、キーidx_g_g_g_g_gt_grtz_grtz_t _ _grtz_st _gt_grtate`)を追加します( `sched_name`、` trigger_group`、 `trigger_state`)、key` idx_qrtz_t_next_fire_fire_fire_fire_fire_fire_fire_fire_を追加します( `sched_name`、` trigger_state`、 `next_fire_time`)、key` idx_qrtz_t_nft_misfire`( `sched_name`、` misfire_instr`、 `next_fire_time`)を追加します( `sched_name`、` misfire_instr`、 `next_fire_time`、` trigger_state`)、キーを追加します `idx_qrtz_t_nft_st_misfire_grp`(` sched_name`、 `misfire_instr`、` next_fire_time `、` prigger_gger`); ---エクスポートされたテーブルを制限---テーブルを制限 `qrtz_blob_triggers` - alter table` qrtz_blob_triggers` constraint `qrtz_blob_triggers_ibfk_1`外部キー(` sched_name`、 `trigger_name`、` trigger_grig`) ( `sched_name`、` trigger_name`、 `trigger_group`); ---テーブルを制限 `qrtz_cron_triggers` - alterテーブル` qrtz_cron_triggers`追加制約 `qrtz_cron_triggers_ibfk_1`外部キー(` sched_name`、 `trigger_name`、` trigger_group`)参照`trigger_name`、` trigger_group`); ---制限テーブル `QRTZ_SIMPLE_TRIGGERS`-ALTER TABLE` QRTZ_SIMPLE_TRIGGERS` Constraint `QRTZ_SIMPLE_TRIGGERS_IBFK_1`外部キー(` SCHED_NAME`、 `TRIGGER_NAME`、` Trigger_Groop`)参照 `Qrigger ( `sched_name`、` trigger_name`、 `trigger_group`); ---リミットテーブル `qrtz_simprop_triggers` - alter table` qrtz_simprop_triggers` constraint `qrtz_simprop_triggers_ibfk_1` foreign key(` sched_name`、 `trigger_name`、`トリガー_grig `qrggger ( `sched_name`、` trigger_name`、 `trigger_group`)参照` qrtz_triggers`( `sched_name`、` trigger_name`、 `trigger_group`); ---制限テーブル `qrtz_triggers` - alter table` qrtz_triggers`追加制約 `qrtz_triggers_ibfk_1` fortionキー(` sched_name`、 `job_name`、` job_group`)参照 `qrtz_job_details` s seade_ name`、ltz_details `、name `job_group`); <br> <br> <br> </em>
Quartzクラスターの実装原則は、データベースを使用して仕事の動作を記録し、ロックメカニズムを通じて、ジョブは同時に1回だけ実行されます。
JobBeanの例
// @service( "dialogjob")パブリッククラスのdialogjobを管理するには、春に引き渡す必要があります{@autowired private questionervice questionervice; }}要約します
上記は、この記事のコンテンツ全体です。この記事の内容には、すべての人の研究や仕事に特定の参照値があることを願っています。ご質問がある場合は、メッセージを残してコミュニケーションをとることができます。 wulin.comへのご支援ありがとうございます。