1.3.4 任务的7种运行模式
决定该任务的jobHandler如何找到
当运行模式为BEAN的时候,JobHandler必填,它对应@XxlJob的value,此种模式最常用
对应的java枚举类如下:
public enum GlueTypeEnum {
BEAN("BEAN", false, null, null),
GLUE_GROOVY("GLUE(Java)", false, null, null),
GLUE_SHELL("GLUE(Shell)", true, "bash", ".sh"),
GLUE_PYTHON("GLUE(Python)", true, "python", ".py"),
GLUE_PHP("GLUE(PHP)", true, "php", ".php"),
GLUE_NODEJS("GLUE(Nodejs)", true, "node", ".js"),
GLUE_POWERSHELL("GLUE(PowerShell)", true, "powershell", ".ps1");
}
以运行模式为GLUE(Java)为例
新建一个运行模式为GLUE(Java)的任务后启动,然后在操作中选择 GLUE IDE
然后就可以编写我们的java程序了,右上角保存生效即可。需要注意:
- 它必须要实现com.xxl.job.core.handler.IJobHandler 接口,否则在任务执行的时候报错。
- 支持@Resource、@Autowired、@Qualifier注入我们自己的spring bean(底层原理很简单:这个java脚本在任务触发的时候会发给我们自己的服务,我们再动态生成class文件,然后再调用SpringGlueFactory.injectService()注入spring依赖,生成最终的GlueJobHandler)
- 在引入我们自己的spring bean的时候,需要在脚本中添加对应的import
- 保存之后这个代码会被存储到表xxl_job_logglue的glue_source字段中,对应的字段类型是mediumtext
package com.xxl.job.service.handler;
import com.xxl.job.core.context.XxlJobHelper;
import com.xxl.job.core.handler.IJobHandler;
import com.test.things.service.impl.sys.SysUserServiceImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext;
public class DemoGlueJobHandler extends IJobHandler {
@Autowired
private ApplicationContext applicationContext;
@Autowired
private SysUserServiceImpl userService;
@Override
public void execute() throws Exception {
XxlJobHelper.log("XXL-JOB, Hello World.");
System.out.println(applicationContext);
System.out.println(userService.getClass().getName());
}
}
如果你需要修改任务的逻辑,只需要重新编辑即可,不需要重启服务