这几天做项目发现统计有很多定时任务需要处理,而项目中都是采用注解得方式去做导致就很分散,不是很好得去做统一管理,找起来也比较麻烦。所以就想着集成一下xxjob 做统一管理
1.什么是xxjob
xxjob是一款分布式任务调度平台,其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线,开箱即用
它支持通过Web页面对任务进行CRUD操作,操作简单
支持动态得修改任务状态,参数,即时生效
任务执行器支持集群部署
支持故障转移和动态扩容等等,,,,
1.下载源码
源码仓库地址:
https://github.com/xuxueli/xxl-job
http://gitee.com/xuxueli0323/xxl-job
下载下来后解压用ideal 打开
mysql 执行table_xxl_job.sql脚本 这里面得一些表主要就是一些存储账户,任务日志,任务之类得
主要是启动xx-job-admin这个服务
先修改一些配置
比如数据库配置
或者端口都可以还有一些别的配置你有得话就改了玩玩
最后启动
效果图:
默认账户:admin 密码:123456
2.创建一个springboot项目
引入核心依赖 这里之所以没写版本号是因为我在父类已经统一设置好了版本
<!-- xxl-job-core -->
<dependency>
<groupId>com.xuxueli</groupId>
<artifactId>xxl-job-core</artifactId>
</dependency>
然后写个demo
3.创建配置文件:application.properties
# web port
server.port=8081
# 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://192.168.10.111:8089/xxl-job-admin
### xxl-job, access token
xxl.job.accessToken=default_token
### xxl-job executor appname
xxl.job.executor.appname=test
### xxl-job executor registry-address: default use address to registry , otherwise use ip:port if address is null
xxl.job.executor.address=http://192.168.10.111:8089/xxl-job-admin
### xxl-job executor server-info
xxl.job.executor.ip=127.0.0.1
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
4.写个实体类去获取
@Configuration
@Data
public class XxlJobProperties {
@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;
}
5.创建配置去set
@Slf4j
@Configuration
@RequiredArgsConstructor
public class XxJobConfig {
private final XxlJobProperties xxlJobProperties;
@Bean
public XxlJobSpringExecutor xxlJobExecutor() {
log.info(">>>>>>>>>>> xxl-job config init.");
XxlJobSpringExecutor xxlJobSpringExecutor = new XxlJobSpringExecutor();
xxlJobSpringExecutor.setAdminAddresses(xxlJobProperties.getAdminAddresses());
xxlJobSpringExecutor.setAppname(xxlJobProperties.getAppname());
xxlJobSpringExecutor.setAddress(xxlJobProperties.getAddress());
// xxlJobSpringExecutor.setIp(ip);
xxlJobSpringExecutor.setPort(xxlJobProperties.getPort());
xxlJobSpringExecutor.setAccessToken(xxlJobProperties.getAccessToken());
xxlJobSpringExecutor.setLogPath(xxlJobProperties.getLogPath());
xxlJobSpringExecutor.setLogRetentionDays(xxlJobProperties.getLogRetentionDays());
return xxlJobSpringExecutor;
}
6.最后开始写执行任务啦
@Component
@Slf4j
public class MyJobHandle {
@XxlJob("MyJobHandler")
public void execute() throws Exception {
System.out.println("我成功的执行了xxjob定时任务!!!!");
}
}
然后在web页面去创建执执行器和任务
创建执行器
appName按照配置来切记!!!
我这里是test
这里自动注册一直注册不上得话就手动注册 把服务IP端口写上去就行了
然后创建任务啦
保存执行就可以啦
结果图就不展示了 大家可以去试试~~~~~