Cet article présente le code d'implémentation du temporisateur ElaticJob intégré Springboot. Partagez-le avec vous. Les détails sont les suivants:
Configuration du fichier POM
<? xml version = "1.0" Encoding = "utf-8"?> <project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modersversion> 4.0.0 </démo-demojob </ artifactive </proncID> <ArtifActid> Deemojob </ artIFAUD> <version> 0.0.1-snapshot </ version> <packaging> jar </packaging> <name> Demojob </name> <description> Projet de démonstration pour Spring Boot </ Description> <parent> <ProupId> org.springFramework.boot </proncId> <Artifactid> printemps-boot-starter-parent </pritifactid> <Dersion> 2.0.2.releas <LelativePath /> <! - Lookup Parent du Repository -> </parent> <Properties> <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <project.reporting.outputencoding> utf-8 </project.reporting.outputincing> <Java.version> 1.8 <java. </properties> <Dependces> <Dependency> <ProupId> org.springframework.boot </prôdId> <ArtifActid> printemp-boot-starter-web </ artifactid> </dependency> <dependency> <proupId> org.springframework.boot </proupId> <ArtifActid> Spring-Boot-starter-Tesst </ artifact> <ccope> test </cope> </ dépendance> <! - Elastic-job -> <dependency> <ArtifActid> Elastic-job-Common-core </ artifactid> <proupId> com.dangdang </proupId> <version> 2.1.5 </ version> </pedigency> <dependency> <ArtifActid> elastic-job-lite-core </ artifactID> <GroupId> com.dangdang </romp grouped> <DERVIÈRE> 2.1.5 </DERNIFRIGNE> </DENDENCENCE> <Dependance> <ArtifActid> Elastic-Job-Lite-Spring </ ArtifactId> <ProupId> com.dangdang </prouprid> <version> 2.1.5 </DERNIFRATION> </Dedency> <Dependance> <ArtefactId> Elastic-Job-Cloud-Executor </ Artifactid> <GroupId> com.dangdang </rompuprid> <DERSE> 2.1.5 </ version> </ Dependency> <! - MARIADB -> <Dendency> <ProupID> Org.MariaDb.jdbc </prounid> <Artifactid> MariaDb-java-Client <version> 1.5.4 </ version> </ dépendance> <! - Druid -> <dependency> <proupId> com.alibaba </proncId> <Artifactid> druid-spring-boot-starter </ artifactid> <version> 1.1.9 </ version> </pedidency> <! - Mybatis plus -> <pedency> <pouprid> com.batidou <! <ArtefactId> MyBatisplus-Spring-Boot-Starter </Retifactid> <Dersion> 1.0.5 </ Version> </ Dependency> <Dependency> <ProupID> com.baomidou </prouvenid> <Artifactid> Mybatis-PLUSE </ Artifactid> </ Version> 2.1.9 </Degelow <GroupId> org.springframework.boot </prôdId> <ArtefactId> Spring-Boot-Maven-Plugin </ ArfactId> </Glugin> </Glugins> </ Build> </ Project>
Configuration du fichier YAML (peut également utiliser Application.Properties)
# Configurer la configuration Source des données Spring: DataSource: Type: com.alibaba.druid.pool.druiddatasource Driver-Class-Name: org.mariadia Druid: ValidationQuery: Sélectionnez 1 InitialSize: 10 MINIDLE: 10 Maxactive: 200 MineVictableIdleMemillis: 180000 TestOnBorrow: False Test WhileIdle: True RemoveAbandonEd: True RemoveAbandonEdTimeout LocalHost: 2181 Espace de noms: Hulk_Order_Task # Configurer les règles de minuterie SimpleJob: Cron: 0/5 * * * *? ShardingTotalCount: 1 ShardingItempaRameters: 0 = 1
Commencer à écrire du code
RegistryCenterConfig
package com.example.demojob.config; import com.dangdang.ddframe.job.reg.zookeeper.zookeeperConfiguration; import com.dangdang.ddframe.job.reg.zookeeper.zookeeper.zookeeperregistryCenter; import org.springframework.beans.factory.annotation.valuue; org.springframework.boot.autoconfigure.condition.conditionalonexpression; import org.springframework.context.annotation.bean; import org.springframework.context.annotation.configuration; / ** * Configuration du centre d'enregistrement * Composante pour l'enregistrement et le travail de coordonnée du travail distribué, le comportement réparti, ne soutient actuellement que le zoofurp. * @author shudalei * / @ configuration @ conditionalonExpression ("'$ {regCenter.serverList}'. Length ()> 0") public Class RegistryCenterConfig {@Bean (initMethod = "init") public zookeepergistryCenter Regcenter (@Value ("$ {Reggener.serverlist}") Final ServerList, ("$ {Reggener.ServerList}") Final ServerList, Final, "$ {Regenter.ServerList}") Final Serverlist, Final, " @Value ("$ {regCenter.Namespace}") Final String Namespace) {return new ZOOKEEPERREGRISTCERCER (new ZOOKEEPERCONFIGURATION (serverList, namespace)); }}Jobeventconfig
package com.example.demojob.config; import com.dangdang.ddframe.job.event.jobeventconfiguration; import com.dangdang.ddframe.job.event.rdb.jobeventdbconfiguration; import org.springframework.context.annotation.bean; importation; org.springframework.context.annotation.configuration; import javax.annotation.resource; import javax.sql.datasource; / ** * Si vous souhaitez écrire le contenu du travail exécuté dans le DB, nous devons utiliser un autre constructeur, * en même temps, définissez votre propre travail-configuration. * Actuellement, il n'y a qu'une seule classe qui implémente cette interface. * Grâce à cela, vous pouvez persister les traces du travail en cours d'exécution vers DB. * @Author Shudalei * / @ ConfigurationPublic classe JobEventConfig {@Resource Private DataSource DataSource; @Bean public jobEventConfiguration jobEventConfiguration () {return new JobeventDBConfiguration (dataSource); }}SimpleJobconfig
package com.example.demojob.config; import com.dangdang.ddframe.job.config.jobcoreconfiguration; import com.dangdang.ddframe.job.config.simple.simplejobconfiguration; import com.dangdang.ddframe.job.event.jobeventconfiguration; com.dangdang.ddframe.job.lite.api.jobscheduler; import com.dangdang.ddframe.job.lite.config.litejobconfiguration; import com.dangdang.ddframe.job.lite.spring.api.springjobscheler; com.dangdang.ddframe.job.reg.zookeeper.zookeepergistryCenter; import com.example.demojob.job.testsimplejob; import org.springframework.context.annotation.value; import org.springframework.context.annotation.configuration; import javax.annotation.resource; @configurationpublic class SimpleJobConfig {/ ** * Centre d'enregistrement * / @Resource ZookeeperRegistryCenter Regcenter; / ** * Configuration de l'événement de travail * / @Resource private jobeEventConfiguration jobEventConfiguration; / ** * WeChat Access Token Get Task Object * * / @Resource Private TestSimpleJob SimpleJob; / ** * * @param cron chronométré la tâche Cron Configuration * @param shardingtotoLCount nombre de fractures de tâche * @param shardingItemparameters tâche paramètres de rossage * @return jobscheduler task planificateur * / @Bean (initMethod = "init") public jobscheduler SimpleJobScheduler (@Value ("$ {simplejob}") ")" Finalj) "FinalJob) (final)" FinalJob) "FinalJob)" FinalJob) "Finaljob)" Finaljob) "FinalJob. Cron, @Value ("$ {SimpleJob.ShardingTotalCount}") Final int ShardingTotalCount, @Value ("$ {SimpleJob.ShardingItempaRameters}") Final String ShardingItemParameters) {return new SpringJobScheduler (SimpleJob, RegCenter, GetliteJobConfiguration (SimpleJob., RegCenter, GetliteJobConfiguration (Simplejob. Cron, ShardingTotalCount, ShardingItempaRameters), JobeventConfiguration); } / ** * * @Param Jobclass Task Classe de planification * @param cron Tâche chronométrée Cron Configuration * @Param ShardingTotalCount Nombre de fragments de tâche * @param ShardingItempARAmeters Task Sharding Paramètres * @return litejobconfiguration Configuration de la tâche * com.dangdang.ddframe.job.api.simple.simplejob> jobclass, final string cron, final int shardingtotalcount, final shardingitemparameters) {return litejobconfiguration .newbuilder (new SimpleJobClass.gel (jobCoreCiguration.newbuilder (jobclass.getNe ShardingTotalCount) .ShardingItempaRameters (ShardingItempaRameters) .Build (), jobclass.getCanonicalName ())) .overWrite (true) .build (); }}Testsimplejob, la tâche de minuterie elle-même
package com.example.demojob.job; import com.dangdang.ddframe.job.api.shardingContext; import com.dangdang.ddframe.job.api.simple.simplejob; import org.springframework.stereteoType.component; @componentPublic Class testsplet // La tâche consiste à exécuter la sortie de la console 1, 2, 3 toutes les 5 secondes ... @Override public void execute (ShardingContext ShardingContext) {count ++; System.out.println ("Task" + Count); }} Enfin, installez Zookeeper sous Docker
Le fichier de composition du script d'installation est le suivant
Version: '2'Services: ZooKeeper01: Image: ZooKeeper Restart: toujours hostname: ZooKeeper01 Ports: - 2181: 2181 Environnement: zoo_my_id: 1 ZOO_SERVERS: Server.1 = 0.0.0.0: 2888: 3888 Server.2 = zookeeper02: 2888: 388888 Server.3 = ZOOKEEPER03: 2888: 3888 ZOOKEETER02: Image: ZooKeeper Restart: Toujours Hostname: ZooKeeper02 Ports: - 2182: 2181 Environment: Zoo_My_id: 2 Zoo_Servers: Server.1 = ZOOKENEER01: 2888: 3888 Server.2 = 0.0.0.0: Server.3 = ZOOKEEPER03: 2888: 3888 ZOOKEETER03: Image: ZooKeeper Restart: Toujours Hostname: ZooKeeper03 Ports: - 2183: 2181 Environnement: zoo_my_id: 3 ZOO_SERVERS: Server.1 = zookeeper01: 2888: 3888 Server.2 = ZOOKEET serveur.3 = 0.0.0.0: 2888: 3888
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.