xxl-job框架学习

xxl-job学习

Springboot定时任务

SpringBoot自带的定时任务框架 @Scheduled

默认是单线程执行所有任务,所以当前时刻只能有一个任务在执行,后续任务的执行要排队,任务一多或某个任务执行时间过长都是会影响到后续任务的执行。

当然,SpringBoot可通过编写配置类,配置成多线程执行定时任务。

原生定时任务框架的缺陷

1、不支持集群 如果集群了的话那么就可能出现任务重复执行的情况

2、不支持生命周期统一管理 不重启服务的情况下关闭、启动任务

3、不支持任务分片 处理有序数据时,多机器分片执行任务处理不同数据

4、不支持失败重试 任务出现异常后,不能根据任务状态重新执行任务

5、不支持动态调整 不重启服务的情况下修改参数

6、任务是把你无报警机制 任务失败后无报警机制

7、任务数据难以统计 任务数据量大的时候,对于任务执行情况无法高效的统计执行情况

总结 定时任务两要素

1、任务的动态管理(随时启动停止,更改执行时间的规则)

2、任务的执行情况(成功,失败的日志记录;失败后尝试重新启动定时任务;任务执行效率如何)

为集群而生的定时任务框架xxl-job

抽离出调度中心:负责从数据库读取相关数据,RPC远程通知集群中的某一个执行器执行任务,检测到任务失败,就重新找一个执行器执行任务。

执行任务的时间规则,参数等都存放在数据库,可以不用重启服务就能动态改变任务的执行时间规则。
xxl-job框架学习_第1张图片

示例

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

### resources
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

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

spring.datasource.type=org.apache.tomcat.jdbc.pool.DataSource
spring.datasource.tomcat.max-wait=10000
spring.datasource.tomcat.max-active=30
spring.datasource.tomcat.test-on-borrow=true
spring.datasource.tomcat.validation-query=SELECT 1
spring.datasource.tomcat.validation-interval=30000

### xxl-job email
spring.mail.host=smtp.qq.com
spring.mail.port=25
[email protected]
spring.mail.password=xxx
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, access token
xxl.job.accessToken=

### xxl-job, i18n (default empty as chinese, "en" as english)
xxl.job.i18n=

###还可配置RPC通信监听端口
###还可配置日志是打印到控制中心



@JobHandler
public class DemoJobHandler extends IJobHandler {

	@Override
	public ReturnT<String> execute(String param) throws Exception {
		XxlJobLogger.log("XXL-JOB, Hello World.");

		for (int i = 0; i < 5; i++) {
			XxlJobLogger.log("beat at:" + i);
			TimeUnit.SECONDS.sleep(2);
		}
		return SUCCESS;
	}

}

配置文件不指定日志打印,默认就只是一条info日志

你可能感兴趣的:(SpringCloud组件)