一.集成xxl-job
1.xxl-job简介(摘自许雪里中文教程)
XXL-JOB是一个分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用。
2.springboot项目集成
2.1引入jar包
<!-- xxljobcore -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
<version>1.9.2</version>
</dependency>
<!-- xxljob 日志文件相关-->
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-server</artifactId>
<version>9.2.26.v20180806</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-http</artifactId>
<version>9.2.26.v20180806</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.2.26.v20180806</version>
</dependency>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-io</artifactId>
<version>9.2.26.v20180806</version>
</dependency>
2.2 添加配置文件
yml:
xxl:
job:
admin:
#测试ip,任务调度中心
addresses: http://localhost:8080/xxl-job-admin-1.9.2
executor:
appname: hy-testone
ip:
port: 9999
logretentiondays: -1
logpath: /data/applogs/xxl-job/jobhandler
accessToken:
配置文件读取:
@Configuration
public class XxlJobConfig {
private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);
/**
* 调用中心配置地址
*/
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
/**
* 执行器AppName [选填]:执行器心跳注册分组依据;为空则关闭自动注册
*/
@Value("${xxl.job.executor.appname}")
private String appName;
/**
* 执行器IP [选填]:默认为空表示自动获取IP,多网卡时可手动设置指定IP,该IP不会绑定Host仅作为通讯实用;地址信息用于 "执行器注册" 和 "调度中心请求并触发任务";
*/
@Value("${xxl.job.executor.ip}")
private String ip;
/**
* 执行器端口号 [选填]:小于等于0则自动获取;默认端口为9999,单机部署多个执行器时,注意要配置不同执行器端口;
*/
@Value("${xxl.job.executor.port}")
private int port;
/**
* 执行器通讯TOKEN [选填]:非空时启用;
*/
@Value("${xxl.job.accessToken}")
private String accessToken;
/**
* 执行器运行日志文件存储磁盘路径 [选填] :需要对该路径拥有读写权限;为空则使用默认路径;
*/
@Value("${xxl.job.executor.logpath}")
private String logPath;
/**
* 执行器日志文件保存天数 [选填] : 过期日志自动清理, 限制值大于等于3时生效; 否则, 如-1, 关闭自动清理功能
*/
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobExecutor xxlJobExecutor() {
logger.info(">>>>>>>>>>> xxl-job config init.");
XxlJobExecutor xxlJobExecutor = new XxlJobExecutor();
xxlJobExecutor.setAdminAddresses(adminAddresses);
xxlJobExecutor.setAppName(appName);
xxlJobExecutor.setIp(ip);
xxlJobExecutor.setPort(port);
xxlJobExecutor.setAccessToken(accessToken);
xxlJobExecutor.setLogPath(logPath);
xxlJobExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobExecutor;
}
}
2.3执行器接口配置
@JobHandler(value="test")
@Component
public class ContractTimeOutJob extends IJobHandler {
protected static final Logger logger = LoggerFactory.getLogger("XXL-JOB");
@Override
public ReturnT<String> execute(String param) throws Exception {
logger.info("测试一下"+param+"啧啧");
return SUCCESS;
}
}
注意:
1.类继承抽象类IJobHandler,execute方法名任意,参数param作为调用中心传承处理,可为空。
2.注解@JobHandler(value=“test”)中value的值对应调用中心配置的JobHandler,作为映射对应处理。
3.调用中心配置
3.1 新增执行器
3.2 新增任务
注意:
1.JobHandler配置对应执行器注解中的值。
2.cron:标准的cron格式
二. springboot自带定时任务
1.简述
springboot自带了一个微型的spring-quartz定时器Scheduled,可以让我们简单的实现定时任务
2.编写
自带的定时器非常简单,代码如下:
@Component
public class TestTask {
@Scheduled(cron="0 * * * * ?")
@Transactional(propagation = Propagation.REQUIRED, rollbackFor=Exception.class)
public void updateSchedulingSynchronize(){
try {
System.out.println("定时任务测试");
} catch (Exception e) {
e.printStackTrace();
}
}
}
启动类:新增@EnableScheduling 注解
注意:
1.@EnableScheduling 注解的作用是发现注解@Scheduled的任务并后台执行,此注解也可添加在存在定时任务的执行类上。
2.@Scheduled标注是定时任务,value值为执行时间
gitee代码地址:https://gitee.com/HuangyinGl/hytests.git
(ps:testone)