Maison  >  Article  >  Java  >  Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

WBOY
WBOYavant
2023-05-14 18:58:061113parcourir

1. Introduction à XxlJob

XXL-JOB est une plate-forme de planification de tâches distribuée. Ses principaux objectifs de conception sont un développement rapide, un apprentissage facile, une légèreté et une expansion facile. Le code source est désormais ouvert et connecté aux gammes de produits en ligne de nombreuses entreprises, prêt à être utilisé immédiatement.

Pourquoi utiliser la planification distribuée des tâches ? Que ce soit pour les projets distribués ou l'équilibrage de charge nginx, les méthodes traditionnelles de mise en œuvre de tâches planifiées sont très lentes à satisfaire, comme

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

2

Release Download

https://github.com/xuxueli/xxl-. jobhttp://gitee.com/xuxueli0323/xxl-job

2.2 Étapes de mise en œuvre des tâches planifiées

1. Exécutez le script SQL dans le projet dans la base de données

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

2 Description de la structure du répertoire

xxl-job-admin : centre de répartition
xxl-job-core : dépendance publique.
xxl-job-executor-samples : Exemples d'exécuteur (choisissez la version appropriée de l'exécuteur, vous pouvez l'utiliser directement, ou vous pouvez vous y référer et transformer le projet existant en exécuteur)
: xxl-job-executor-sample -springboot : version Springboot, gérez l'exécuteur via Springboot, cette méthode est recommandée
: xxl-job-executor-sample-frameless : version sans cadre

3 Modifier le fichier de configuration du centre de répartition

### web ;
server.port=8080
server.servlet.context-path=/xxl-job-admin

###actuator
management.server.servlet.context-path=/actuator
management.health.mail.enabled=false

# ## resources
spring.mvc.servlet.load-on-startup=0
spring.mvc.static-path-pattern=/static/**
spring.resources.static-locations=classpath:/static/

# ## freemarker
spring.freemarker.templateLoaderPath=classpath:/templates/
spring.freemarker.suffix=.ftl
spring.freemarker.charset=UTF-8
spring.freemarker.request-context-attribute=request
spring.freemarker .settings.number_format=0.##########

### mybatis
mybatis.mapper-locations=classpath:/mybatis-mapper/*Mapper.xml
#mybatis.type- aliases-package =com.xxl.job.admin.core.model

### xxl-job, datasource
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding= UTF-8&autoReconnect =true&serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

### datasource-pool
spring.datasource.type=com.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle=10
spring.datasource.hikari.maximum-pool-size=30
spring.datasource.hikari. auto-commit =true
spring.datasource.hikari.idle-timeout=30000
spring.datasource.hikari.pool-name=HikariCP
spring.datasource.hikari.max-lifetime=900000
spring.datasource.hikari.connection- timeout=10000
spring.datasource.hikari.connection-test-query=SELECT 1
spring.datasource.hikari.validation-timeout=1000

### xxl-job, boîte aux lettres d'alarme par e-mail, si l'exécution de la tâche planifiée échoue, un message sera envoyé à l'e-mail
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=XXX@qq.com
spring.mail.from=XXX@qq .com
spring.mail. password=code d'autorisation
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail. smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

### xxl-job, jeton d'accès au centre de répartition du jeton de communication [facultatif] : activé lorsque non vide ;
## # Si le jeton de communication est configuré, le accessToken du centre de répartition et des services de l'exécuteur doit être cohérent
xxl.job.accessToken=

### xxl-job, i18n (la valeur par défaut est zh_CN, et vous pouvez choisissez "zh_CN", "zh_TC" et "en")
# Configuration de l'internationalisation du centre de répartition [obligatoire] : la valeur par défaut est "zh_CN"/chinois simplifié, la plage facultative est "zh_CN"/chinois simplifié, "zh_TC"/chinois traditionnel et "en "/anglais
xxl.job.i18n=zh_CN

## xxl-job, taille maximale du triggerpool
# Planification de la configuration maximale des threads du pool de threads [obligatoire]
xxl.job.triggerpool.fast.max=200
xxl.job.triggerpool.slow.max=100

### xxl-job, jours de conservation des journaux
#Jours de conservation des données de la table des journaux du centre de planification [obligatoire] : les journaux expirés sont automatiquement nettoyés lorsque la limite est supérieure ; supérieur ou égal à 7, sinon, comme -1, désactivez la fonction de nettoyage automatique ;
xxl.job.logretentiondays=30

Si la configuration ci-dessus a été effectuée correctement, le projet peut être compilé, empaqueté et déployé.

Adresse d'accès au centre de planification : http://localhost:8080/xxl-job-admin (Cette adresse sera utilisée par l'exécuteur comme adresse de rappel)

Le compte de connexion par défaut est "admin/123456". , l'interface en cours d'exécution est la suivante Comme le montre la figure.

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

4. Configurez le projet exécuteur

de manière native xxl-job-executor-sample-frameless (non recommandé)
Projet "Executor": xxl-job-executor-sample-springboot (fournit plusieurs versions pour l'exécution là-bas Il existe plusieurs exécuteurs parmi lesquels choisir, en prenant comme exemple la version Springboot. Elle peut être utilisée directement, ou vous pouvez vous y référer et transformer des projets existants en exécuteurs)
Fonction : Responsable de la réception de la planification et de l'exécution du "Scheduling Center". ; l'exécuteur peut être déployé directement, ou les actionneurs peuvent être intégrés dans des projets métiers existants.

#port web
server.port=8081
#no web
#spring.main.web-environment=false

# log config
logging.config=classpath:logback.xml
# Adresse racine de déploiement du centre de planification [facultatif] : s'il existe plusieurs adresses pour le déploiement du cluster du centre de répartition, séparez-les par des virgules. L'exécuteur utilisera cette adresse pour « l'enregistrement du rythme cardiaque de l'exécuteur » et le « rappel du résultat de la tâche » ; si elle est vide, l'enregistrement automatique sera désactivé
xxl.job.admin.addresses=http://127.0.0.1:8080/ ; xxl-job -admin

# Executor communication TOKEN [facultatif] : activé lorsqu'il n'est pas vide ;
xxl.job.accessToken=

# Executor AppName [facultatif] : base de regroupement des battements de cœur de l'exécuteur s'il est vide, l'enregistrement automatique est désactivé ;
xxl.job.executor.appname=xxl-job-executor-llp
# Enregistrement de l'exécuteur [facultatif] : Cette configuration est préférée comme adresse d'enregistrement. Si elle est vide, le service intégré "IP:PORT" est utilisé comme adresse d'enregistrement. adresse d'inscription. Cela offre une prise en charge plus flexible des problèmes d’adresse IP dynamique d’exécuteur de type conteneur et de port de mappage dynamique.
xxl.job.executor.address=
# Executor IP [facultatif] : La valeur par défaut est vide pour obtenir automatiquement l'IP. Lorsqu'il y a plusieurs cartes réseau, vous pouvez définir manuellement l'IP spécifiée. L'IP ne sera pas liée à l'IP. Hôte et n'est utile que pour la communication ; informations d'adresse Utilisé pour « l'enregistrement de l'exécuteur » et « les tâches de demande et de déclenchement du centre de planification »
xxl.job.executor.ip=
# Numéro de port de l'exécuteur [facultatif] : obtenu automatiquement s'il est inférieur ; supérieur ou égal à 0 ; le port par défaut est 9999, autonome Lors du déploiement de plusieurs exécuteurs, veillez à configurer différents ports d'exécuteur
xxl.job.executor.port=0
# Chemin du disque de stockage des fichiers journaux de l'exécuteur ; : Vous devez disposer des autorisations de lecture et d'écriture sur ce chemin ; pour S'il est vide, utilisez le chemin par défaut
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
# Nombre de jours pour enregistrer le journal de l'exécuteur ; fichiers [facultatif] : les journaux expirés sont automatiquement nettoyés, et cela prend effet lorsque la valeur limite est supérieure ou égale à 3 ; Sinon, comme -1, désactivez la fonction de nettoyage automatique
xxl.job.executor.logretentiondays=30 ;

5. Ajouter un exécuteur

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

6. Ajouter une tâche planifiée

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

Afficher le calendrier. journal d'uling

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

3. SpringBoot intègre XxlJob

3.1 Créer un projet SpringBoot et introduire des dépendances

package com.xxl.job.executor.service.jobhandler;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.annotation.XxlJob;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class TestXxlJob {
    private static Logger logger = LoggerFactory.getLogger(TestXxlJob.class);
    @XxlJob(value = "testJobHandler", init = "init", destroy = "destroy")
    public void testJobHandler() throws Exception {
        logger.info("进入xxlJob定时任务。。。。");
    }
    public void init(){
        logger.info("init");
    }
    public void destroy(){
        logger.info("destroy");
    }
    @XxlJob("testJobHandler02")
    public void demoJobHandler() throws Exception {
        XxlJobHelper.log("XXL-JOB, Hello World.");
        logger.info("进入testJobHandler02定时任务。。。。");
    }
}
Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob3.2 Écrire le fichier de configuration des propriétés

# port web

server.port=8081

# no web

#spring.main.web-environment =false

# log config

logging.config=classpath:logback.xml
# Adresse racine du déploiement du centre de planification [facultatif] : telle que la planification S'il y a plusieurs adresses dans le déploiement du cluster central, séparez-les par des virgules. L'exécuteur utilisera cette adresse pour « l'enregistrement du rythme cardiaque de l'exécuteur » et le « rappel du résultat de la tâche » ; si elle est vide, l'enregistrement automatique sera désactivé
xxl.job.admin.addresses=http://127.0.0.1:8080/ ; xxl-job -admin

# Executor communication TOKEN [facultatif] : activé lorsqu'il n'est pas vide ;

xxl.job.accessToken=llp

# Executor AppName [facultatif] : base de regroupement des battements de cœur de l'exécuteur s'il est vide, désactivez l'enregistrement automatique ;
xxl.job.executor.appname=xxl-job-executor-llp

# Inscription de l'exécuteur [facultatif] : La priorité est donnée à l'utilisation de cette configuration comme adresse d'inscription. Si elle est vide, le service embarqué "IP:PORT" est. utilisée comme adresse d'enregistrement. Cela offre une prise en charge plus flexible des problèmes d’adresse IP dynamique d’exécuteur de type conteneur et de port de mappage dynamique.

xxl.job.executor.address=
# Executor IP [facultatif] : La valeur par défaut est vide pour obtenir automatiquement l'IP. Lorsqu'il y a plusieurs cartes réseau, vous pouvez définir manuellement l'IP spécifiée. L'IP ne sera pas liée à l'IP. Hôte et n'est utile que pour la communication ; informations sur l'adresse Utilisé pour « l'enregistrement de l'exécuteur » et « les tâches de demande et de déclenchement du centre de planification »

xxl.job.executor.ip=127.0.0.1

# Numéro de port de l'exécuteur [facultatif] : obtenu automatiquement si ; il est inférieur ou égal à 0 ; le port par défaut est 9999, lors du déploiement de plusieurs exécuteurs sur une seule machine, veillez à configurer différents ports d'exécuteur
xxl.job.executor.port=9999
# Exécuteur exécutant le disque de stockage des fichiers journaux ; chemin [facultatif] : vous devez avoir un accès en lecture et en écriture à ce chemin. Autorisations ; s'il est vide, utilisez le chemin par défaut
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
# Nombre de jours ; pour enregistrer les fichiers journaux de l'exécuteur [facultatif] : les journaux expirés sont automatiquement nettoyés, la valeur limite est supérieure ou égale à Effective à 3 ; sinon, comme -1, désactivez la fonction de nettoyage automatique
xxl.job.executor.logretentiondays ; =30


Notez que lors de la création d'une tâche dans le centre de répartition, le nom de l'application et le nom de l'application configurés par l'exécuteur doivent être cohérents ;
3.4 Écrire la classe de travail à tester

<dependency>
    <groupId>com.xuxueli</groupId>
    <artifactId>xxl-job-core</artifactId>
    <version>${稳定版}</version>
</dependency>

Créer l'exécuteur

Créer la tâche

查看后台执行日志

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

如果需要xxlJob邮件报警功能,则需要在xxl-job-admin中进行配置邮件信息,并在创建任务时指定配置的邮箱地址

### xxl-job, email报警邮箱,如果定时任务执行失败会推送消息给该邮箱
spring.mail.host=smtp.qq.com
spring.mail.port=25
spring.mail.username=XXX@qq.com
spring.mail.from=XXX@qq.com
spring.mail.password=授权码
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

ps:如果定时任务执行频率很高,频繁失败的话,那收邮件就是一个噩梦~

Comment SpringBoot intègre la plateforme de planification de tâches distribuée XxlJob

4.XxlJob部署

4.1 jar包部署方式

jar包部署的方式比较简单,将项目编译打包部署到服务器上,其他服务和xxljob调度器之间网络、接口相通即可

4.2 Docker 镜像方式搭建调度中心

下载镜像

# Docker地址:https://hub.docker.com/r/xuxueli/xxl-job-admin/     (建议指定版本号)
docker pull xuxueli/xxl-job-admin
# 如需自定义 mysql 等配置,可通过 "-e PARAMS" 指定,参数格式 PARAMS="--key=value  --key2=value2" ;
# 配置项参考文件:/xxl-job/xxl-job-admin/src/main/resources/application.properties
# 如需自定义 JVM内存参数 等配置,可通过 "-e JAVA_OPTS" 指定,参数格式 JAVA_OPTS="-Xmx512m" ;
docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://127.0.0.1:3306/xxl_job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai" -p 8080:8080 -v /tmp:/data/applogs --name xxl-job-admin  -d xuxueli/xxl-job-admin:{指定版本}
Télécharger
Télécharger

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer