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

浙公网安备 33010602011771号