Heim  >  Artikel  >  Java  >  Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert

Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert

WBOY
WBOYnach vorne
2023-05-14 18:58:061115Durchsuche

1. Einführung in XxlJob

XXL-JOB ist eine verteilte Aufgabenplanungsplattform. Seine zentralen Designziele sind schnelle Entwicklung, einfaches Lernen, geringes Gewicht und einfache Erweiterung. Der Quellcode ist jetzt offen und mit den Online-Produktlinien vieler Unternehmen verbunden und sofort einsatzbereit.

Warum verteilte Aufgabenplanung verwenden? Unabhängig davon, ob es sich um verteilte Projekte oder den Nginx-Lastausgleich handelt, sind herkömmliche Methoden zur Implementierung geplanter Aufgaben sehr langsam, z. B.

Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert

2. job

Herunterladen

http://gitee.com/xuxueli0323/xxl-jobHerunterladen

2.2 Geplante Aufgabenimplementierungsschritte

1. Führen Sie das SQL-Skript im Projekt in der Datenbank aus

Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert

2. Beschreibung der Verzeichnisstruktur

xxl-job-admin: Versandzentrum
xxl-job-core: öffentliche Abhängigkeit
xxl-job-executor-samples: Executor-Beispiele (wählen Sie die entsprechende Version des Executors, Sie können ihn direkt verwenden oder darauf verweisen und das vorhandene Projekt in einen Executor umwandeln)
: xxl-job-executor-sample -springboot: Springboot-Version, diese Methode wird empfohlen
: xxl-job-executor-sample-frameless: rahmenlose Version

### 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=Asien/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, E-Mail-Alarmpostfach, wenn die geplante Aufgabenausführung fehlschlägt, Eine Nachricht wird an die E-Mail-Adresse
spring.mail.host=smtp.qq.com

spring.mail.port=25

spring.mail.username=XXX@qq.com
spring.mail.from=XXX@qq gesendet .com
spring.mail. Passwort=Autorisierungscode
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, Zugriffstoken Dispatch-Center-Kommunikation TOKEN [optional]: aktiviert, wenn nicht leer;
## # Wenn das Kommunikationstoken konfiguriert ist, muss das AccessToken der Dispatch-Center- und Executor-Dienste konsistent sein

xxl.job.accessToken=


### xxl-job, i18n (Standard ist zh_CN, und Sie können Wählen Sie „zh_CN“, „zh_TC“ und „en“) und „en“/Englisch; xxl.job.triggerpool.slow.max=100

### xxl-job, Protokollaufbewahrungstage

#Scheduling Center Protokolltabellendatenaufbewahrungstage [erforderlich]: Abgelaufene Protokolle werden automatisch bereinigt; es wird wirksam, wenn das Limit größer ist größer oder gleich 7, andernfalls, z. B. -1, deaktivieren Sie die automatische Reinigungsfunktion.

Zugriffsadresse des Planungscenters: http://localhost:8080/xxl-job-admin (Diese Adresse wird vom Ausführenden als Rückrufadresse verwendet)

Das Standard-Anmeldekonto lautet „admin/123456“. , die laufende Schnittstelle ist wie folgt Wie in der Abbildung gezeigt. 4. Konfigurieren Sie das Executor-Projekt Es stehen mehrere Executoren zur Auswahl, am Beispiel der Springboot-Version. Sie können direkt darauf verweisen oder vorhandene Projekte in Executoren umwandeln.
Funktion: Verantwortlich für den Empfang der Planung und Ausführung des „Scheduling Center“. ; Der Executor kann direkt eingesetzt werden, oder Actuators können in bestehende Geschäftsprojekte integriert werden.

# Web-Port

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

# log config
logging.config=classpath:logback.xml
# Stammadresse der Dispatching-Center-Bereitstellung [optional]: Wenn es mehrere Adressen für die Dispatching-Center-Cluster-Bereitstellung gibt, trennen Sie diese durch Kommas. Der Executor verwendet diese Adresse für die „Executor Heartbeat-Registrierung“ und den „Aufgabenergebnis-Rückruf“. Wenn sie leer ist, wird die automatische Registrierung deaktiviert
xxl.job.admin.addresses=http://127.0.0.1:8080/; xxl-job -admin

# Executor-Kommunikations-TOKEN [optional]: aktiviert, wenn nicht leer;
xxl.job.accessToken=

# Executor-AppName [optional]: Gruppierungsbasis für Executor-Heartbeat; wenn leer, ist die automatische Registrierung deaktiviert
xxl.job.executor.appname=xxl-job-executor-llp
# Executor-Registrierung [optional]: Diese Konfiguration wird als Registrierungsadresse bevorzugt. Wenn sie leer ist, wird der eingebettete Dienst „IP:PORT“ als verwendet Registrierungsadresse. Dies bietet eine flexiblere Unterstützung für Probleme mit dynamischen IP-Adressen und dynamischen Zuordnungsports von Executoren vom Typ Container.
xxl.job.executor.address=
# Executor IP [optional]: Die Standardeinstellung ist leer, um die IP automatisch zu erhalten. Wenn mehrere Netzwerkkarten vorhanden sind, können Sie die angegebene IP manuell festlegen Host und ist nur für die Kommunikation nützlich; Adressinformationen werden für „Executor-Registrierung“ und „Planungscenter-Anforderungs- und Trigger-Aufgaben“ verwendet größer oder gleich 0; der Standardport ist 9999, eigenständig. Achten Sie bei der Bereitstellung mehrerer Executoren darauf, unterschiedliche Executor-Ports zu konfigurieren
xxl.job.executor.port=0
# Executor, der den Protokolldateispeicher-Festplattenpfad ausführt; : Sie benötigen Lese- und Schreibberechtigungen für diesen Pfad. Wenn er leer ist, verwenden Sie den Standardpfad
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
# Anzahl der Tage, um das Executor-Protokoll zu speichern Dateien [optional]: Abgelaufene Protokolle werden automatisch bereinigt und werden wirksam, wenn der Grenzwert größer oder gleich 3 ist. Andernfalls, z. B. -1, schalten Sie die automatische Bereinigungsfunktion aus


5. Einen Executor hinzufügen

7. Ein Testprogramm schreiben Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert

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定时任务。。。。");
    }
}

Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriertPlan anzeigen Duling-Protokoll

3. SpringBoot integriert XxlJob

Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert3.1 Erstellen Sie ein SpringBoot-Projekt und führen Sie Abhängigkeiten ein =false

# log config

logging.config=classpath:logback.xml

# Stammadresse der Scheduling-Center-Bereitstellung [optional]: z. B. Scheduling Wenn in der zentralen Cluster-Bereitstellung mehrere Adressen vorhanden sind, trennen Sie diese durch Kommas. Der Executor verwendet diese Adresse für die „Executor Heartbeat-Registrierung“ und den „Aufgabenergebnis-Rückruf“. Wenn sie leer ist, wird die automatische Registrierung deaktiviert Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriertxxl.job.admin.addresses=http://127.0.0.1:8080/; xxl-job -admin

# Executor-Kommunikations-TOKEN [optional]: aktiviert, wenn nicht leer; xxl.job.executor.appname=xxl-job-executor-llp

# Executor-Registrierung [optional]: Die Verwendung dieser Konfiguration als Registrierungsadresse hat Vorrang. Wenn sie leer ist, wird der eingebettete Dienst „IP:PORT“ verwendet als Registrierungsadresse. Dies bietet eine flexiblere Unterstützung für Probleme mit dynamischen IP-Adressen und dynamischen Zuordnungsports von Executoren vom Typ Container.

xxl.job.executor.address=

# Executor IP [optional]: Die Standardeinstellung ist leer, um die IP automatisch zu erhalten. Wenn mehrere Netzwerkkarten vorhanden sind, können Sie die angegebene IP manuell festlegen Host und ist nur für die Kommunikation nützlich; Adressinformationen werden für „Executor-Registrierung“ und „Planungscenter-Anforderungs- und Trigger-Aufgaben“ verwendet er ist kleiner oder gleich 0; der Standardport ist 9999. Wenn Sie mehrere Executoren auf einem einzelnen Computer bereitstellen, achten Sie darauf, verschiedene Executor-Ports zu konfigurieren Pfad [optional]: Sie benötigen Lese- und Schreibzugriff auf diesen Pfad. Wenn er leer ist, verwenden Sie den Standardpfad

xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler

# Anzahl der Tage um Executor-Protokolldateien zu speichern [optional]: Abgelaufene Protokolle werden automatisch bereinigt, der Grenzwert ist größer oder gleich Effektiv bei 3; andernfalls, z. B. -1, deaktivieren Sie die automatische Reinigungsfunktion
xxl.job.executor.logretentiondays =30



Beachten Sie, dass beim Erstellen einer Aufgabe im Dispatch-Center der App-Name und der vom Executor konfigurierte App-Name konsistent sein müssen; Executor Es wird empfohlen, die IP und den Port zu konfigurieren

3.3 Schreiben Sie die xxljob-Konfigurationsklasse

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

3.4 Schreiben Sie die Jobklasse zum Testen
@Configuration
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
    @Value("${xxl.job.admin.addresses}")
    private String adminAddresses;
    @Value("${xxl.job.accessToken}")
    private String accessToken;
    @Value("${xxl.job.executor.appname}")
    private String appname;
    @Value("${xxl.job.executor.address}")
    private String address;
    @Value("${xxl.job.executor.ip}")
    private String ip;
    @Value("${xxl.job.executor.port}")
    private int port;
    @Value("${xxl.job.executor.logpath}")
    private String logPath;
    @Value("${xxl.job.executor.logretentiondays}")
    private int logRetentionDays;
    @Bean
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-job config init.");
        XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
        xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
        xxlJobSpringExecutor.setAppname(appname);
        xxlJobSpringExecutor.setAddress(address);
        xxlJobSpringExecutor.setIp(ip);
        xxlJobSpringExecutor.setPort(port);
        xxlJobSpringExecutor.setAccessToken(accessToken);
        xxlJobSpringExecutor.setLogPath(logPath);
        xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
        return xxlJobSpringExecutor;
    }
    /**
     * 针对多网卡、容器内部署等情况,可借助 "spring-cloud-commons" 提供的 "InetUtils" 组件灵活定制注册IP;
     *
     *      1、引入依赖:
     *          <dependency>
     *             <groupId>org.springframework.cloud</groupId>
     *             <artifactId>spring-cloud-commons</artifactId>
     *             <version>${version}</version>
     *         </dependency>
     *
     *      2、配置文件,或者容器启动变量
     *          spring.cloud.inetutils.preferred-networks: &#39;xxx.xxx.xxx.&#39;
     *
     *      3、获取IP
     *          String ip_ = inetUtils.findFirstNonLoopbackHostInfo().getIpAddress();
     */
}

Erstellen Sie den Executor


Erstellen Sie die Aufgabe



查看后台执行日志

Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert

如果需要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:如果定时任务执行频率很高,频繁失败的话,那收邮件就是一个噩梦~

Wie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert

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:{指定版本}

Das obige ist der detaillierte Inhalt vonWie SpringBoot die verteilte Aufgabenplanungsplattform XxlJob integriert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen