xxl-job定时任务调度中心的配置以及整合到自己的项目中实现远程调用
目录
前言:
xxl-job配置与启动:
xxl-job-admin:
xxl-job-execultor--sample-springboot:
启动任务调度中心:
编辑
调用定时任务:
编辑
项目结构:
编辑
AdUpdateTaskConfig:
application.properties:
logback.xml:
pom依赖:
创建自己的任务(AdUpdateJob):
配置自己写的定时任务:
前言:
在分布式项目中,实际开发会采用负载均衡策略,那么一个服务也许会部署多个服务器。如果说不采用任务调度中心而是在服务模块中写定时任务的话,会造成同一个任务多次执行,有可能会造成数据库的多次修改。
xxl-job配置与启动:
xxl-job-admin:
分布式任务调度平台XXL-JOB (xuxueli.com),从该网址clone代码。
改成自己的数据库,同时还需要创建数据库和执行sql文件
xxl-job-execultor--sample-springboot:
上面的注解用来表示该任务的名称。
如果以后想要添加自己的定时任务,只需要在这个模块里面写就行了
启动任务调度中心:
启动的url是 localhost:xxl-job-admin的端口号/jobinfo
我的是 localhost:8069/jobinfo
调用定时任务:
虽然我们成功跑起来了,但是大伙还是有很多疑惑,比如怎么配置自己的定时任务,以及如何在自己的项目中使用定时任务,接下来才是重点
在自己的项目中配置xxl-job:
项目结构:
AdUpdateTaskConfig:
package com.dmdd.taskservice.config;import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/* xxl-job config @author xuxueli 2017-04-28*/
@Slf4j
@Configuration
public class AdUpdateTaskConfig {@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;@Beanpublic XxlJobSpringExecutor xxlJobExecutor() {log.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;}
}
application.properties:
# web port
server.port=6969
# no web
#spring.main.web-environment=false# log config
logging.config=classpath:logback.xml xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
xxl.job.admin.addresses=http://127.0.0.1:8069/xxl-job-admin xxl-job, access token
xxl.job.accessToken=default_token xxl-job executor appname
xxl.job.executor.appname=xxl-job-executor-sample
xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=
xxl-job executor server-info
xxl.job.executor.ip=
xxl.job.executor.port=9999
xxl-job executor log-path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
xxl-job executor log-retention-days
xxl.job.executor.logretentiondays=30
![]()
端口记得跟自己的xxl-job-admin服务端口对应
logback.xml:
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds"><contextName>logback</contextName><property name="log.path" value="/data/applogs/xxl-job/xxl-job-executor-sample-springboot.log"/><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{HH:mm:ss.SSS} %contextName [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${log.path}</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${log.path}.%d{yyyy-MM-dd}.zip</fileNamePattern></rollingPolicy><encoder><pattern>%date %level [%thread] %logger{36} [%file : %line] %msg%n</pattern></encoder></appender><root level="info"><appender-ref ref="console"/><appender-ref ref="file"/></root></configuration>
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:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.4.RELEASE</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.dmdd</groupId><artifactId>task-service</artifactId><version>0.0.1-SNAPSHOT</version><name>task-service</name><description>task-service</description><properties><java.version>8</java.version></properties><dependencies><!-- spring-boot-starter-web (spring-webmvc + tomcat) --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!-- xxl-job-core --><dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.1-SNAPSHOT</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
该依赖中我们引入了
<!-- xxl-job-core --> <dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.1-SNAPSHOT</version> </dependency>我们想要引入该依赖需要如下操作
导入xxl-job-core依赖到我们的项目中
创建自己的任务(AdUpdateJob):
package com.dmdd.taskservice.config;import com.xxl.job.core.handler.annotation.XxlJob;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
@Slf4j
@Component
public class AdUpdateJob {private static Logger logger = LoggerFactory.getLogger(AdUpdateJob.class);@XxlJob("test")public void updateAd() {log.info("任务调度成功");}}
该任务的名字叫test。我们想要在自己的项目中调用该服务还是需要启动xxl-job-admin服务
配置自己写的定时任务:
点击新增
cron用来配置任务执行的时间
JobHandler要写任务名
配置完就可以启动了