04 xxl-job任务的7种运行模式(附带GLUE(Java)DEMO)

1,955 阅读1分钟

image.png

1.3.4 任务的7种运行模式

image.png

决定该任务的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

image.png

然后就可以编写我们的java程序了,右上角保存生效即可。需要注意:

  1. 它必须要实现com.xxl.job.core.handler.IJobHandler 接口,否则在任务执行的时候报错。
  2. 支持@Resource、@Autowired、@Qualifier注入我们自己的spring bean(底层原理很简单:这个java脚本在任务触发的时候会发给我们自己的服务,我们再动态生成class文件,然后再调用SpringGlueFactory.injectService()注入spring依赖,生成最终的GlueJobHandler
  3. 在引入我们自己的spring bean的时候,需要在脚本中添加对应的import
  4. 保存之后这个代码会被存储到表xxl_job_logglue的glue_source字段中,对应的字段类型是mediumtext

image.png

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());
    }

}

如果你需要修改任务的逻辑,只需要重新编辑即可,不需要重启服务