xxljob走过的误区-配置以及纠错点

xxljob 分布式任务调度平台。

xxljob 的介绍以及简单配置这里不多说,可以直接搜索GIT上的源码以及文档进行查阅。

这里主要是说一下自己填过的坑。

项目构成:

xxl-job-admin:调度中心

xxl-job-core:公共依赖

xxl-job-executor-samples:执行器(我这里以springboot项目为例)

调度中心配置文件:

xxljob走过的误区-配置以及纠错点_第1张图片

图片是直接copy下来的,这里主要的点是数据库的配置 其他的默认即可。数据库名字是项目重的sql文件中定义的,当然可以自己更改。

调度中心一般都没什么问题,大部分是可以正常配置的,启动的话建议两种方式。

1.独立测试的话可以springboot自带的启动类启动

2.开发项目建议将项目打成war/jar包部署到tomcat目录下webapp下,直接启动tomcat即可

这里简单说一下打成jar/war包的步骤:

准备工作:

1.规范打成war包名称:再pom.xml里添加 xxl-job-admin 这里是指打成的包名一直是xxl-job-admin

             com.spotify
            docker-maven-plugin
            0.4.13
            
               
               ${project.artifactId}:${project.version}
               ${project.basedir}
               
                  
                     /
                     ${project.build.directory}
                     ${project.build.finalName}.jar
                  
               
            
         
      
      xxl-job-admin
   

指定打成jar/还是war包,同样再pom.xml中配置:

war

xxljob走过的误区-配置以及纠错点_第2张图片

2.用maven的命令打包 install (idea右侧的maven按钮下就有) 打成的war包一般存放在项目的target目录下,这里会有打成的war包,以及项目配置等

将下面选中的都copy后放入tomcat的webapp目录下,启动即可。这里包括xxl-job-admin 以及xxl-job-admin.war

xxljob走过的误区-配置以及纠错点_第3张图片

此时,调度中心就已经配置成功,如上所述均配置正确,启动也应该没问题,如有问题请留言,一起探讨。

2.xxl-job-core:这个提供的只是依赖,项目中用到的也只是在pom.xml中引入依赖,还没有仔细看,这里先不做解释。

3.xxl-job-executor:执行器

大部分问题都是出在这里的

首先:配置文件

当 调度中心admin是通过tomcat启动(即使springboot方式启动,端口也会占用8080,内嵌tomcat的缘故)成功,执行器中的端口号不能与tomcat的端口号相同,如图,我的改成8082.

调度中心地址:当调度中心启动成功后,页面的路径是什么,这里就填入什么,例如:访问调度中心的地址是:http://localhost:8080/xxl-job-admin 那么这里的地址同样也是:http://localhost:8080/xxl-job-admin

接下来是执行器的配置

appname 要与项目名称一致,这里的项目是指执行器项目例如:xxl-job-executor,ip可以不填(这里对应控制器中 执行器选项的 自动注册,手动注册)端口号是jetty的端口号,默认是9999 可以修改,根据具体个人情况是否修改。

如下:

# web port
server.port=8082

# log config
logging.config=classpath:logback.xml

### 执行器配置
### xxl-job admin address 地址必须与调度中心访问地址保持一致
xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin

### xxl-job executor address ,执行器appname 也就是项目名称
xxl.job.executor.appname=xxl-job-executor
### ip port 默认即可
xxl.job.executor.ip=
xxl.job.executor.port=9999

### xxl-job, access token
xxl.job.accessToken=

### xxl-job log path
xxl.job.executor.logpath=/data/applogs/xxl-job/jobhandler
### xxl-job log retention days
xxl.job.executor.logretentiondays=-1

接下来先创建config配置中心:

package com.xxl.job.executor.core.config;

import com.xxl.job.core.executor.impl.XxlJobSpringExecutor;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

/**
 * 作用:配置中心,说的白话一点,就是将调度中心与执行器关联 ,有兴趣的同学可以看一下源码的:xxlJobExecutor方法
 *
 * @author xuxueli 2017-04-28
 */
@Configuration
@ComponentScan(basePackages = "com.xxl.job.executor.service.jobhandler")//这里是handler所在包的地址
public class XxlJobConfig {
    private Logger logger = LoggerFactory.getLogger(XxlJobConfig.class);

    @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;


    @Bean(initMethod = "start", destroyMethod = "destroy")
    public XxlJobSpringExecutor xxlJobExecutor() {
        logger.info(">>>>>>>>>>> xxl-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;
    }

}

创建handler:

package com.xxl.job.executor.service.jobhandler;

import com.xxl.job.core.biz.model.ReturnT;
import com.xxl.job.core.handler.IJobHandler;
import com.xxl.job.core.handler.annotation.JobHandler;
import com.xxl.job.core.log.XxlJobLogger;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;


/**
 * 任务Handler示例(Bean模式)
 *
 * 开发步骤:
 * 1、继承"IJobHandler":“com.xxl.job.core.handler.IJobHandler”;
 * 2、注册到Spring容器:添加“@Component”注解,被Spring容器扫描为Bean实例;
 * 3、注册到执行器工厂:添加“@JobHandler(value="自定义jobhandler名称")”注解,注解value值对应的是调度中心新建任务的JobHandler属性的值。这里说的是下图①的地方
 * 4、执行日志:需要通过 "XxlJobLogger.log" 打印执行日志;
 *
 * @author xuxueli 2015-12-19 19:43:36
 */
@JobHandler(value="demoJobHandler")
@Component
public class DemoJobHandler extends IJobHandler {

   @Override
   public ReturnT execute(String param) throws Exception {
      XxlJobLogger.log("XXL-JOB, Hello World.");

      for (int i = 0; i < 5; i++) {
         XxlJobLogger.log("beat at:" + i);
         TimeUnit.SECONDS.sleep(2);
      }
      return SUCCESS;
   }

}

配置成功后,可以启动执行器(执行器启动的时候是用springboot启动类启动的)如启动失败可以下方留言。

最后在可视化界面中先添加执行器,后添加定时任务。

1.添加执行器时选择自动注册时,建议将本地的ip地址填入执行器的配置文件中的xxl.job.executor.ip地方(在添加执行器前填入效果更好)

2.添加定时任务时主要点时handler要保持与代码中的相同即可 ①

3.项目一般采用的bean模式,这个不固定,根据不同的情况选择不同的模式

接下测试即可。

罗列一下我自己走过的坑:

1.将admin调度中心打成war包放入tomcat下运行,报错各种错误

-------------解决方法:xxl-job-admin 与 xxl-job-admin.war 一同放到webapp目录下

2.添加执行器选择自动注册时一直注册不上

-------------解决方法:xxl.job.executor.ip这个填入本机的ip地址(之前填的时127.0.0.1,注册的时候注册不进去)

3.job handler nof found

-------------解决方法:一般时handler书写错误,仔细核对,然后执行器是用springboot启动,(我出这个错误的时候我的项目都没有问题,最后也不知道怎么的就好了,现在正在思考这个问题)

文档有待补充优化,这几天会再优化一版,想探讨的留言即可,我也是刚接触这个!

 

 

你可能感兴趣的:(java)