Tomcat Quartz项目改造集成xxljob

1.原项目采用spring+tomcat格式开发,采用的是spring 自带的quartz定时任务,现改为通过xxjob控制定时任务

 

步骤1:lib文件中添加xxjob包,此处采用的是scheduler-job-core-2.0.4.jar

    注:如果为maven项目,需要在pom文件中引入 scheduler-spring-boot-starter-2.0.2.jar,通过此包启动时注入启动xxjob监听

步骤2:配置文件中添加xxjob端口等配置信息,

xxl.job.admin.addresses=http://127.0.0.1:8086/scheduler
xxl.job.executor.appname=carCore
##xxl.job.executor.ip=
#默认9999无须指定,当9999被占用会自增找没占用的端口
xxl.job.executor.port=9999
##xxl.job.accessToken=
xxl.job.executor.logpath=/app/build/logs/std/crm-schedule/xxl/
xxl.job.executor.logretentiondays=-1

步骤3:添加biz-context-xxjob.xml文件,配置启动注入项等信息(如果为maven项目,忽略此步骤)

   <!-- 配置01、启动时注册表 -->
    <context:annotation-config/>
    <context:component-scan base-package="cn.sunline.poll.dataRegister"></context:component-scan>


 <!-- 配置02、执行器 -->
    <bean id="xxlJobSpringExecutor" class="com.xxl.job.core.executor.impl.XxlJobSpringExecutor"  destroy-method="destroy" >
        <!-- 执行器注册中心地址[选填],为空则关闭自动注册 -->
        <property name="adminAddresses" value="${xxl.job.admin.addresses}" />
        <!-- 执行器AppName[选填],为空则关闭自动注册 -->
        <property name="appName" value="${xxl.job.executor.appname}" />
        <!-- 执行器IP[选填],为空则自动获取 -->
       <!-- <property name="ip" value="${xxl.job.executor.ip}" />-->
        <!-- 执行器端口号[选填],小于等于0则自动获取 -->
        <property name="port" value="${xxl.job.executor.port}" />
        <!-- 访问令牌[选填],非空则进行匹配校验 -->
        <!--<property name="accessToken" value="${xxl.job.accessToken}" />-->
        <!-- 执行器日志路径[选填],为空则使用默认路径 -->
        <property name="logPath" value="${xxl.job.executor.logpath}" />
        <!-- 日志保存天数[选填],值大于3时生效 -->
        <property name="logRetentionDays" value="${xxl.job.executor.logretentiondays}" />
    </bean>

步骤4:applicationContext.xml启动项中引入biz-context-xxjob.xml文件

<import resource="biz-context-xxjob.xml"/>

步骤5:要执行的.java类中添加,java文件所在路径需要与步骤3中 “配置01、启动时注册表”中路径对应

@JobHandler(value="dataRegisterJSJob")
@Component
public class dataRegisterJSJob extends IJobHandler  {
    @Override
    public ReturnT<String> execute(String s) throws Exception {
        System.err.print("定时任务开始性");
        return SUCCESS;
    }
    

}

步骤6:统一任务调度平台中添加上述步骤中的定时任务

 

 

        选择刚才新建的执行器,点击新增任务,输入相应信息,点击保存按钮,注意jobHandler需要与步骤5中@JobHandler(value="dataRegisterJSJob")中value一致

 

 步骤七:执行定时任务点击执行按钮,正常调用;

 

 

 2,配置过程中遇到的问题

问题1:项目启动时xxjob9999端口会启动两次,

 <!-- 配置02、执行器 -->,init-method="start"选项配置后导致 scheduler-spring-boot-starter-2.0.2.jar中start方法被执行一次,

查看源码发现start方法所在的类中集成了InitializingBean,启动时会再次状态注入文件,删除init-method="start"后此错误解决

问题2:配置文件冲突,

 因原项目使用的spring相关的包都是2.0+,版本过低导致scheduler-job-core-2.0.4.jar运行时找不到存在版本冲突

        解决方式 spring 相关包改为4.3.21版本,spring-hibernate3采用3-2.0.8版本

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'xxlJobSpringExecutor' defined in ServletContext resource [/WEB-INF/biz-context-xxjob.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.springframework.util.StringUtils.isEmpty(Ljava/lang/Object;)Z

 

问题3:启动时jar包不存在,

解决方式,github中下载xxjob项目源码,找出丢失的方法在具体那个jar中,copyjar包至当前项目中

下载地址:https://github.com/xuxueli/xxl-job

 

posted @ 2021-02-04 16:11    阅读(940)  评论(0)    收藏  举报