当前位置:网站首页>Elastic job Dynamic Task configuration

Elastic job Dynamic Task configuration

2021-09-15 05:50:47 Petit frère à la recherche du vent

Préface

AvantspringbootIntégrationelastic-jobChapitre II,Nous avons appris,elastic-jobC'est un bon cadre d'ordonnancement des tâches,Le présent titre décrit plus en détail,Comment utiliserelastic-jobScénarios d'exécution pour réaliser des tâches dynamiques communes

Préparation environnementale

zookeeperInstallation et démarrage(Disponible localementwindowsÉdition,Plus rapide)

Construction simple

1、Ajouter une basepomDépendance

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <mybatis-plus-boot-starter.version>3.3.0</mybatis-plus-boot-starter.version>
        <mybatis-plus-generator.version>3.3.0</mybatis-plus-generator.version>
        <swagger.version>2.9.2</swagger.version>
        <swagger-bootstrap-ui.version>1.9.6</swagger-bootstrap-ui.version>
    </properties>

    <dependencies>

        <!--swagger-ui-->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>${swagger.version}</version>
        </dependency>
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>${swagger-bootstrap-ui.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.dangdang/elastic-job-lite-spring -->
        <!--<dependency> <groupId>com.github.kuhn-he</groupId> <artifactId>elastic-job-lite-spring-boot-starter</artifactId> <version>2.1.5</version> </dependency>-->

        <dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-core</artifactId>
            <version>2.1.5</version>
        </dependency>

        <dependency>
            <groupId>com.dangdang</groupId>
            <artifactId>elastic-job-lite-spring</artifactId>
            <version>2.1.5</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>

        <!-- MyBatisOutils améliorés-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus-boot-starter.version}</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>${mybatis-plus-generator.version}</version>
        </dependency>

        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.0</version>
        </dependency>

    </dependencies>

      
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 71.
  • 72.
  • 73.
  • 74.
  • 75.
  • 76.
  • 77.
  • 78.
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 87.
  • 88.
  • 89.
  • 90.

2、Configuration du profilzkInformation

elastic-jobCalendrier des tâches pour, Dépendance au moment de l'exécution zk, Vous devez donc configurer en fonction de votre propre situation zk, On peut comprendre que les tâches doivent être combinées zk Utilisation du noeud , Si vous n'avez pas besoin d'une connexion à la base de données, vous pouvez ignorer


server.port=8081

# zookeeperCluster
elaticjob.zookeeper.server-lists=127.0.0.1:2181
elaticjob.zookeeper.namespace=updatetask

#Configuration dynamique
zkserver= 127.0.0.1:2181
zknamespace=zknamespce

#Configuration dynamique2
elasticjob.serverlists=127.0.0.1:2181
elasticjob.namespace=boot-job

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://IP:3306/dbname?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false
spring.datasource.username=root
spring.datasource.password=root

mybatis-plus.mapper-locations=classpath*:mapper/*.xml
mybatis-plus.global-config.db-column-underline=true
mybatis-plus.global-config.db-config.id-type=uuid
mybatis-plus.global-config.db-config.field-strategy=not_null
mybatis-plus.global-config.refresh=true
mybatis-plus.configuration.map-underscore-to-camel-case=true
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl


      
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

3、ConfigurationElasticJobAutres

Y compris:zkRegistre,elastic-job Moniteurs, etc

import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperConfiguration;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import lombok.Data;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@Data
public class ElasticJobConfig {

    @Value("${elasticjob.serverlists}")
    private String serverLists;

    @Value("${elasticjob.namespace}")
    private String namespace;

    @Bean
    public ZookeeperConfiguration zConfig(){
        return new ZookeeperConfiguration(serverLists, namespace);
    }

    @Bean(initMethod = "init")
    public ZookeeperRegistryCenter registryCenter(ZookeeperConfiguration config){
        return new ZookeeperRegistryCenter(config);
    }

    @Bean
    public ElasticJobListener elasticJobListener(){
        return new ElasticJobListener(1000L, 10000L);
    }
}


      
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.

4、 Classe de configuration dynamique du traitement des tâches

Comprend principalement l'ajout, la suppression et la modification de tâches dynamiques

import com.dangdang.ddframe.job.api.simple.SimpleJob;
import com.dangdang.ddframe.job.config.JobCoreConfiguration;
import com.dangdang.ddframe.job.config.simple.SimpleJobConfiguration;
import com.dangdang.ddframe.job.lite.api.listener.ElasticJobListener;
import com.dangdang.ddframe.job.lite.config.LiteJobConfiguration;
import com.dangdang.ddframe.job.lite.internal.schedule.JobRegistry;
import com.dangdang.ddframe.job.lite.spring.api.SpringJobScheduler;
import com.dangdang.ddframe.job.reg.zookeeper.ZookeeperRegistryCenter;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component
public class ElasticJobHandler {

    @Resource
    private ZookeeperRegistryCenter registryCenter;

    @Resource
    private ElasticJobListener elasticJobListener;

    private static LiteJobConfiguration.Builder simpleJobConfigBuilder(String jobName,
                                                                       Class<? extends SimpleJob> jobClass,
                                                                       int shardTotalCount,
                                                                       String cron,
                                                                       String id) {
        return LiteJobConfiguration.newBuilder(new SimpleJobConfiguration(
                JobCoreConfiguration.newBuilder(jobName,cron,shardTotalCount).jobParameter(id).build(),jobClass.getCanonicalName()
        ));
    }

    /**
     *  Ajouter une tâche programmée 
     */
    public void addJob(String jobName, SimpleJob jobInstance, String cron, Integer shardTotalCount, String id) {
        LiteJobConfiguration jobConfig = simpleJobConfigBuilder(jobName, jobInstance.getClass(), shardTotalCount, cron, id)
                .overwrite(true).build();
        new SpringJobScheduler(jobInstance,registryCenter,jobConfig,elasticJobListener).init();
    }

    /**
     *  Modifier la tâche programmée 
     * @param jobName
     * @param cron
     */
    public void updateJob(String jobName, String cron) {
        JobRegistry.getInstance().getJobScheduleController(jobName).rescheduleJob(cron);
    }

    /**
     *  Supprimer la tâche programmée 
     * @param jobName
     */
    public void removeJob(String jobName){
        JobRegistry.getInstance().getJobScheduleController(jobName).shutdown();
    }
}

      
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 57.

5、 Ajout, suppression et modification de la tâche d'implémentation de l'interface

import com.congge.task.config.ElasticJobHandler;
import com.congge.task.config.MyElasticJob;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/task")
public class ElasticController {

    @Autowired
    private ElasticJobHandler jobHandler;

    @GetMapping("/add")
    public Object addJob(String jobName,String cronExpress){
        if(StringUtils.isEmpty(jobName)){
            jobName = "test-job";
        }
        if(StringUtils.isEmpty(cronExpress)){
            cronExpress = "1/5 * * * * ?";
        }
        jobHandler.addJob(jobName, new MyElasticJob(), cronExpress, 1, "1");
        return "add success";
    }

    @GetMapping("/update")
    public Object updateJob(String jobName,String cronExpress){
        if(StringUtils.isEmpty(jobName)){
            jobName = "test-job";
        }
        if(StringUtils.isEmpty(cronExpress)){
            cronExpress = "1/5 * * * * ?";
        }
        jobHandler.updateJob(jobName,cronExpress);
        return "update success";
    }

    @GetMapping("/remove")
    public Object removeJob(String jobName){
        jobHandler.removeJob(jobName);
        return "remove success";
    }

}

      
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 46.

Testez l'interface pour voir si elle fonctionne , Commençons par ajouter une tâche
elastic-job Configuration dynamique des tâches _elastic
elastic-job Configuration dynamique des tâches _spring_02
Je vois., L'arrière - plan a commencé la tâche , Parce que nous n'avons pas exécuté cron, Par défaut tous les 5Une fois par seconde

Bien sûr., On peut aussi se connecter elastic-jobConsole pour, Voir nos coulisses en marche job, Les paires de consoles sont disponibles jobTraitement, Comme si on arrêtait ça job
elastic-job Configuration dynamique des tâches _bootstrap_03
Après avoir cliqué sur Fermer , La tâche ne sera plus exécutée
elastic-job Configuration dynamique des tâches _zookeeper_04
elastic-job Configuration dynamique des tâches _bootstrap_05

Intégration avec les activités réelles

Il y a souvent des scènes comme ça , Nous devons modifier la valeur d'état des données d'une table dans la base de données , Ou sauvegardez régulièrement les données d'une table , Ou accomplir des tâches spéciales, etc ,Peut être utiliséelastic-jobPour finir

Plus précisément,, Il suffit de le réaliser SimpleJob Dans la classe de execute Faites - le à l'intérieur de la méthode , Par exemple, il y a un scénario ,Tous les5 Les secondes ont besoin d'être correctes. user L'état dans le tableau est 1Modification des données
elastic-job Configuration dynamique des tâches _zookeeper_06

Il est donc possible de transformer directement MyElasticJobCette classe

public class MyElasticJob implements SimpleJob {

    UserService userService = SpringContextUtil.getBean("userService");

    @Override
    public void execute(ShardingContext shardingContext) {
        String jobName = shardingContext.getJobName();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm:ss");
        System.out.println("Mission:" + jobName +",Mise en œuvre" + "Temps:" + simpleDateFormat.format(new Date()));
        //Exécuter des tâches spécifiques
        userService.changeStatus();
    }
}

      
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.

S'il y a plus d'affaires à traiter , On peut faire ça de la même façon , Commencez les travaux ci - dessous , Ajouter une tâche pour exécuter , Voyez si vous pouvez atteindre l'objectif souhaité ,

elastic-job Configuration dynamique des tâches _bootstrap_07
elastic-job Configuration dynamique des tâches _elastic-job_08
Je vois.,Après exécution,statusLa valeur de est devenue-1

Ce qui précède est tout le contenu de cet article ,En application pratique, Il y a encore beaucoup de facteurs à modifier , J'espère que ça t'aidera

 

版权声明
本文为[Petit frère à la recherche du vent]所创,转载请带上原文链接,感谢
https://chowdera.com/2021/09/20210914173523242t.html

随机推荐