中企动力做网站的价格,邵阳做网站价格,建设网站是什么关系,做名宿比较好的网站如果你看官方文档#xff0c;在研究透#xff0c;至少也得几天时间#xff0c;如果你直接看我的文档#xff0c;快速用到项目中#xff0c;也就10分钟就搞好了。
xxl-job功能确实很强大#xff0c;而且使用的人比较多#xff0c;既然在使用xxl-job#xff0c;那肯定是…如果你看官方文档在研究透至少也得几天时间如果你直接看我的文档快速用到项目中也就10分钟就搞好了。
xxl-job功能确实很强大而且使用的人比较多既然在使用xxl-job那肯定是基于定时任务比较多不方便管理才使用它让定时任务成为一个独立的服务其它任务可以快速的使用。
但xxl-job也有自己的问题问题如下
1、配置执行器、配置任务只能在管理界面去操作也就是说我如果要使用xxl-job我代码写好了还需要手动去xxl-job-admin管理页面手动去配置执行器、配置任务而且官方文档也没有说通过代码接口的方式创建执行器及任务这就非常不爽了我们既然在使用你那说明我们的定时任务非常多想快速的集成进来通过代码自动创建执行器和任务不要手动去配置。
所以基于上面原因在实际项目上的使用本文件就要解决上面的问题通过代码全自动集成到项目中
在介绍之前先简单讲一下xxl-job的原理不是官方一大堆文字这里说的都是直白话方便你快速明白如何使用
1、有两个系统任务调度中心xxl-job官方提供、业务系统您自己的
2、使用xxl-job分4步
1在任务调度中心创建执行器说直白点就是业务系统在任务调度中心进行一个注册类似于注册中心
2在任务调度中心创建任务这个任务主要是根据cron表达式定时来调用你的业务系统
3业务系统写代码先注册后通过XxlJob来实现定时任务的具体逻辑后面会详讲
4在任务调度中心启动任务
本文所涉及到的代码会放在文章最后面欢迎下载压缩包中有两个工程分别为xxl-job-admin官方任务调度中心、xxl-job-soft你自已的业务系统所以本文先介绍启动xxl-job-admin再介绍xxl-job-soft代码集成本文xxl-job版本号为2.4.0
一、xxl-job-admin任务调度中心的环境搭建
1、在xxl-job-admin工程里有一个doc的文件夹里面有一个tables_xxl_job.sql的数据库脚本文件直接在mysql数据库上执行执行完就会创建一个xxl-job的数据库
2、idea打开xxl-job-admin工程修改application.properties里面的数据库配置如下
### web
server.port8080
server.servlet.context-path/xxl-job-admin### actuator
management.server.servlet.context-path/actuator
management.health.mail.enabledfalse### resources
spring.mvc.servlet.load-on-startup0
spring.mvc.static-path-pattern/static/**
spring.resources.static-locationsclasspath:/static/### freemarker
spring.freemarker.templateLoaderPathclasspath:/templates/
spring.freemarker.suffix.ftl
spring.freemarker.charsetUTF-8
spring.freemarker.request-context-attributerequest
spring.freemarker.settings.number_format0.############# mybatis
mybatis.mapper-locationsclasspath:/mybatis-mapper/*Mapper.xml
#mybatis.type-aliases-packagecom.xxl.job.admin.core.model### xxl-job, datasource
spring.datasource.urljdbc:mysql://192.168.137.202:3306/xxl_job?useUnicodetruecharacterEncodingUTF-8autoReconnecttrueserverTimezoneAsia/Shanghai
spring.datasource.usernameroot
spring.datasource.password123456
spring.datasource.driver-class-namecom.mysql.cj.jdbc.Driver### datasource-pool
spring.datasource.typecom.zaxxer.hikari.HikariDataSource
spring.datasource.hikari.minimum-idle10
spring.datasource.hikari.maximum-pool-size30
spring.datasource.hikari.auto-committrue
spring.datasource.hikari.idle-timeout30000
spring.datasource.hikari.pool-nameHikariCP
spring.datasource.hikari.max-lifetime900000
spring.datasource.hikari.connection-timeout10000
spring.datasource.hikari.connection-test-querySELECT 1
spring.datasource.hikari.validation-timeout1000### xxl-job, email
spring.mail.hostsmtp.qq.com
spring.mail.port25
spring.mail.usernamexxxqq.com
spring.mail.fromxxxqq.com
spring.mail.passwordxxx
spring.mail.properties.mail.smtp.authtrue
spring.mail.properties.mail.smtp.starttls.enabletrue
spring.mail.properties.mail.smtp.starttls.requiredtrue
spring.mail.properties.mail.smtp.socketFactory.classjavax.net.ssl.SSLSocketFactory### xxl-job, access token
xxl.job.accessTokendefault_token### xxl-job, i18n (default is zh_CN, and you can choose zh_CN, zh_TC and en)
xxl.job.i18nzh_CN## xxl-job, triggerpool max size
xxl.job.triggerpool.fast.max200
xxl.job.triggerpool.slow.max100### xxl-job, log retention days
xxl.job.logretentiondays30
3、运行XxlJobAdminApplication.java服务就启动了在页面访问http://localhost:8080/xxl-job-admin
默认用户名为admin密码为123456 二、xxl-job-soft工程的使用代码集成xxl-job
说明xxl-job-soft中的TaskController里面方法使用了Map这是硬编码实际项目上不要这样用这只是为了方便看到向xxl-job-admin请求传参创建执行器和任务等的方便你主要是要关心创建执行器后返回的executorId执行器id和创建任务返回的taskId任务id这两个id需要您存储到你的业务数据库方便后面比如启动任务、停止任务、删除任务等等使用
代码集成也和上面说的原理一样分4步分别为
第一步创建执行器 第二步创建任务 第三步业务执行代码和注册 第四步启动任务
服务启动运行XxlJobExecutorApplication.java打开页面
http://localhost:8081/ck/swagger-ui.html controller代码
RestController
RequestMapping(/task)
Api(tags TaskController, description 任务管理)
public class TaskController {Value(${xxl.job.executor.appname})private String appname;Autowiredprivate XxlJobClient xxlJobClient;GetMapping(/createExecutor)ApiOperation(第一步创建执行器)public String createExecutor(String title) {MapString,Object map new HashMap();map.put(title,title);map.put(appname,appname);map.put(addressType,0);String info xxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.EXECUTOR_CREATE,map);//返回执行器id删除执行器时要用此id,根据你的业务保存在业务库String executorId xxlJobClient.getContent(info);System.out.println(执行器Id:executorId);return 执行器Id:executorId;}GetMapping(/createTask)ApiOperation(第二步创建任务)public String createTask(ApiParam(value 执行器Id)RequestParam String executorId,ApiParam(value 任务名称)RequestParam String jobDesc,ApiParam(value cron表达式)RequestParam(defaultValue 0 * * * * ? ) String cron,ApiParam(value 处理器)RequestParam(defaultValue myHandler )String executorHandler,ApiParam(value 执行参数)RequestParam String executorParam) {MapString,Object map new HashMap();map.put(jobGroup,executorId);//第一步创建执行器返回的executorIdmap.put(jobDesc,jobDesc);//任务名称map.put(scheduleConf,cron);//0 * * * * ? 每分钟执行一次自定义map.put(cronGen_display,cron);map.put(executorHandler,executorHandler);//在第三步通过 XxlJob(myHandler)注册的处理器此处传myHandler根据自己需要换名称map.put(executorParam,executorParam);//此时传的什么值在第三步执行时可以原样获取获取代码 String param XxlJobHelper.getJobParam();map.put(author,admin);//默认值map.put(glueType,BEAN);//默认值map.put(scheduleType,CRON);//默认值map.put(executorRouteStrategy,FIRST);//默认值map.put(misfireStrategy,DO_NOTHING);//默认值map.put(executorBlockStrategy,SERIAL_EXECUTION);//默认值map.put(executorTimeout,0);//默认值map.put(executorFailRetryCount,0);//默认值String info xxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.TASK_CREATE,map);//返回任务id删除执行器时要用此id,根据你的业务保存在业务库String taskId xxlJobClient.getContent(info);System.out.println(任务Id:taskId);return 任务Id:taskId;}GetMapping(/startTask)ApiOperation(第四步启动任务)public String startTask(String taskId) {MapString,Object map new HashMap();map.put(id,taskId);//第二步创建任务返回的taskIdxxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.TASK_START,map);return 启动成功;}GetMapping(/stoptTask)ApiOperation(停止任务)public String stoptTask(String taskId) {MapString,Object map new HashMap();map.put(id,taskId);//第二步创建任务返回的taskIdxxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.TASK_STOP,map);return 停止成功;}GetMapping(/deleteTask)ApiOperation(删除任务)public String deleteTask(String taskId) {MapString,Object map new HashMap();map.put(id,taskId);//第二步创建任务返回的taskIdxxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.TASK_DELETE,map);return 停止成功;}GetMapping(/deleteExecutor)ApiOperation(删除执行器)public String deleteExecutor(String executorId) {MapString,Object map new HashMap();map.put(id,executorId);//第二步创建任务返回的taskIdxxlJobClient.xxlJobPost(Constants.XXL_JOB_URL.EXECUTOR_DELETE,map);return 停止成功;}
}
执行器注册代码
Beanpublic XxlJobSpringExecutor xxlJobExecutor() {logger.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;}
定时任务具体的业务代码
//第三步业务执行代码XxlJob(myHandler)public void demoJobHandler() throws Exception {XxlJobHelper.log(XXL-JOB, Hello World.);String param XxlJobHelper.getJobParam();String msg 收到第二步创建任务时executorParam的参数param 当前任务执行结束;XxlJobHelper.log(msg);System.out.println(msg);}
三测试使用在swagger中操作
第一步创建执行器记住执行器Id返回为2具体返回多少根据你自己的执行结果 在任务调度中心也可以看到执行器了
第二步创建任务任务id为3并在任务调度中心查看任务状态是停止状态 第三步业务执行代码和注册
上面代码已列出
第四步启动任务 第五步在业务系统查看任务是否执行查看已运行 四、代码下载地址
链接https://pan.baidu.com/s/1qZHQmzBF0UrSDHdYobmYlQ?pwdka1u 提取码ka1u