分布式任务调度中心(xxl job)


title: 分布式任务调度中心(xxl-job) tags:

  • xxl-job
  • 分布式调度
  • cron categories: 工作日志 date: 2017-05-25 18:18:56

对于分布式调度选择较多 www.oschina.net/project/tag…

但大部分均依赖于外来组件(zookeeper等)对于初期的job center来说未免过重,经过筛选考虑可以使用xxl-job,只依赖mysql服务

使用方法:

  1. 项目中配置执行器
       <!-- 配置02、执行器 -->
       <bean id="xxlJobExecutor" class="com.xxl.job.core.executor.XxlJobExecutor" init-method="start"
             destroy-method="destroy">
           <!-- 执行器IP[选填],为空则自动获取 -->
           <property name="ip" value="${xxl.job.executor.ip}"/>
           <!-- 执行器端口号[必须] -->
           <property name="port" value="${xxl.job.executor.port}"/>
           <!-- 执行器AppName[选填],为空则关闭自动注册 -->
           <property name="appName" value="${xxl.job.executor.appname}"/>
           <!-- 执行器注册中心地址[选填],为空则关闭自动注册 -->
           <property name="adminAddresses" value="${xxl.job.admin.addresses}"/>
           <!-- 执行器日志路径[必填] -->
           <property name="logPath" value="${xxl.job.executor.logpath}"/>
       </bean>
复制代码
 
复制代码
  1. 配置jobcenter地址和执行端口
       ### xxl-job admin address list, such as "http://address" or "http://address01,http://address02"
       xxl.job.admin.addresses=http://192.168.1.116:8080/job-admin
       ### xxl-job executor address
       xxl.job.executor.appname=f6-erp
       xxl.job.executor.ip=
       xxl.job.executor.port=19999
       ### xxl-job log path
       xxl.job.executor.logpath=${catalina.base}/logs/
复制代码
根据环境不同可以利用maven配置不同的appName,appname对应在执行器的名称
复制代码
  1. 对于需要触发job的任务继承AbstractF6MonitorJob同时增加注解JobHandler,配置让spring扫描到即可
       @Component
       @JobHander(value = "库存均价校验")
       public class ValidateAvgPriceJob extends AbstractF6MonitorJob {
        
           @Autowired
           private MonitorService monitorService;
        
           @Override
           public ReturnT<String> execute(String... params) throws Exception {
               validateAvgPrice();
               return ReturnT.SUCCESS;
           }
        
           public void validateAvgPrice() {
               DateTime now = new DateTime();
               DateTime deleteDate = now.minusDays(OLD_DAY_DROP_TABLE);
               if (needDropTable(deleteDate)) {
                   monitorService.dropMonitorTable(deleteDate.toString(TABLE_NAME_PATTERN));
               }
               String suffix = now.toString(TABLE_NAME_PATTERN);
               if (monitorService.checkTableExists(suffix).size() == 0) {
                   monitorService.createMonitorTable(now.toString(TABLE_NAME_PATTERN));
               }
               DateTime yesterday = now.minusDays(1);
               String startSuffix = yesterday.toString(TABLE_NAME_PATTERN);
               if (monitorService.checkTableExists(startSuffix).size() == 1) {
                   MonitorSo so = new MonitorSo(startSuffix, now.toString(TABLE_NAME_PATTERN), yesterday.toString(DEFAULT_DAY_FORMAT_PATTERN), now.toString(DEFAULT_DAY_FORMAT_PATTERN));
                   List<MonitorVo> diff = monitorService.selectDiffAvgPrice(so);
                   if (!diff.isEmpty()) {
                       generateLog("validateAvgPrice", diff);
                   }
        
                   diff = monitorService.selectDiffStock(so);
                   if (!diff.isEmpty()) {
                       generateLog("validateStockWithSnapShot", diff);
                   }
        
               }
        
           }
        
           private boolean needDropTable(DateTime deleteDate) {
               //月末数据为1号被封,因此不删除1号数据
               return deleteDate.get(DateTimeFieldType.dayOfMonth()) != 1;
           }
        
       }
复制代码
 
复制代码
  1. 配置完成后增加执行器,通常配置为自动注册,appName注意和配置文件对应
  2. 配置执行job,选择合适的执行器以及调度cron 表达式
    运行模式可以参考my.oschina.net/xuxueli/blo…  支持shell,python脚本和java代码以及预定义job
  3. 如果job执行失败会受到错误邮件
  4. 开发或者测试可以手动触发或者暂停job的执行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值