定时任务的实现方式:1、定时任务框架:quartz 2、SpringBoot内置定时任务调度:Spring Task
3、多线程里线程池:ScheduledExecutorService 4、java.util.Timer类里的TimeTask 5、Thread类
6、xxl-job:大众点评大牛开发的定时任务框架 7、elastic job:当当大牛开发的定时任务框架
定时任务使用场景:定时更新数据库,定时发邮件,定时发送短信。
xxl-job使用教程:1、https://github.com/xuxueli/xxl-job,从上面下载聚合工程。
2、启动,需要在数据库建立对应的表。
3、调度中心访问地址:http://localhost:8080/xxl-job-admin 。
4、在启动一个job服务器,接着在任务管理模块点击执行按钮执行定时任务,
5、注意启动顺序,先启动调度中心服务,在启动job服务器服务,job服务器可以是多个。这是由分布式调度平台的原理决定的:所有的执行器(job)必须先在任务调度平台执行,然后由任务调度平台路由(就是分发,可以理解为nginx的负载均衡)到实际的job服务器。
定时任务配置类的形式,配置文件里配置,配置类里通过@value("${xxx}")取值,然后XxlJobSpringExecutor类里设置。
/**
* <pre>
* @功能及特点的描述简述: 定时任务初始化及配置
* <pre>
*/
@Slf4j
//@Configuration
public class UTaxJobConfig {
@Value("${xxl.job.admin.addresses}")
private String adminAddresses;
@Value("${xxl.job.executor.appname}")
private String appName;
@Value("${xxl.job.executor.ip}")
private String ip;
@Value("${xxl.job.executor.port}")
private int port;
@Value("${xxl.job.accessToken}")
private String accessToken;
@Value("${xxl.job.executor.logpath}")
private String logPath;
@Value("${xxl.job.executor.logretentiondays}")
private int logRetentionDays;
@Value("${utax.job.enabled}")
private String UTAX_JOB_ENABLED;
@Bean(initMethod = "start", destroyMethod = "destroy")
public XxlJobSpringExecutor xxlJobExecutor() {
if (Boolean.valueOf(this.UTAX_JOB_ENABLED)) {
log.info(">>>>>>>>>>> utax-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(adminAddresses);
xxlJobSpringExecutor.setAppName(appName);
xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(port);
xxlJobSpringExecutor.setAccessToken(accessToken);
xxlJobSpringExecutor.setLogPath(logPath);
xxlJobSpringExecutor.setLogRetentionDays(logRetentionDays);
return xxlJobSpringExecutor;
} else {
log.warn("任务未开启,不初始化分布式调度器!");
return null;
}
}
}