一、原生Java版本

1. 引入maven依赖
<!--
同时提供有Gradle等各类依赖类型 
https://mvnrepository.com/artifact/cn.horace.cronjob/cronjob-executor 
-->
<dependency>
    <groupId>cn.horace.cronjob</groupId>
    <artifactId>cronjob-executor</artifactId>
    <version>最新版本</version>
</dependency>
2. 实现任务处理接口
/**
 * 演示任务
 * Created in 2025-01-01 10:44.
 *
 * @author Horace
 */
@TaskConfig(name = "普通测试任务", cron = "* * * * * ? ", routerStrategy = RouterStrategy.RANDOM)
public class DemoCronTask implements TaskHandler {
    private static final Logger logger = LoggerFactory.getLogger(DemoCronTask.class);

    /**
     * 执行任务的方法
     *
     * @param params 任务参数
     * @return 任务执行结果,如果执行成功,则返回HandlerResult.success(),如果执行失败,则返回HandlerResult.fail(),返回null,也判定是失败
     */
    @Override
    public HandlerResult handle(TaskParams params) {
        logger.info("task handler..., params:{}", params);
        Random random = new Random();
        int delay = random.nextInt(50);
        LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(delay));
        return HandlerResult.success();
    }
}
3. 新建启动类
/**
 * 示例执行器
 * <p>
 *
 * @author Horace
 */
public class ExampleExecutor {
    private static final Logger logger = LoggerFactory.getLogger(ExampleExecutor.class);

    public static void main(String[] args) {
        ArrayList<Object> taskObjects = new ArrayList<>();
        taskObjects.add(new DemoCronTask());
        
        ExecutorConfig config = ExecutorConfig.Builder.newBuilder(taskObjects)
                .address("http://127.0.0.1:9527")
                .tenant("horace")
                .appName("example-executor")
                .appDesc("普通示例执行器")
                .tag("common")
                .signKey("7d890a079948b196756rtf5452d2245t")
                .build();
        CronJobExecutorClient.init(config).start();
    }
}
  • address:这里指定的是调度器的地址,如果是本地单节点测试,则指定地址+端口的方式是;如果是线上集群部署,则指定的是Nginx地址。
  • tenant:租户的代码,一般是租户的英文名称。
  • appName:应用名称,一般是应用的英文名称。
  • appDesc:应用描述,应用的中文描述,后续在管理平台中可以看到。
  • tag:标签,用于区分同个应用下的不同执行器,如无需求,则不配置即可。
  • signKey:签名密钥,用于验证执行器的身份,必须和调度器配置的签名密钥一致。

二、SprintBoot版本

1. 引入maven依赖
<!--
同时提供有Gradle等各类依赖类型 
https://mvnrepository.com/artifact/cn.horace.cronjob/cronjob-executor-starter 
-->
<dependency>
    <groupId>cn.horace.cronjob</groupId>
    <artifactId>cronjob-executor-starter</artifactId>
    <version>最新版本</version>
</dependency>
2. 实现任务处理接口
/**
 * 演示任务
 *
 * @author Horace
 */
@Component
@TaskConfig(name = "Spring测试任务", cron = "* * * * * ? ", routerStrategy = RouterStrategy.RANDOM)
public class DemoCronTask implements TaskHandler {
    private static final Logger logger = LoggerFactory.getLogger(DemoCronTask.class);

    /**
     * 执行任务的方法
     *
     * @param params 任务参数
     * @return 任务执行结果,如果执行成功,则返回HandlerResult.success(),如果执行失败,则返回HandlerResult.fail(),返回null,也判定是失败
     */
    @Override
    public HandlerResult handle(TaskParams params) {
        logger.info("task handler..., params:{}", params);
        Random random = new Random();
        int delay = random.nextInt(200);
        LockSupport.parkNanos(TimeUnit.MILLISECONDS.toNanos(delay));
        return HandlerResult.success();
    }
}

注意:这里的任务类一定要打上Spring的注解,可以是@Component,把对象实例交给Spring管理。

3. 新建配置类
/**
 * Created in 2025-01-01 21:00.
 *
 * @author Horace
 */
@Configuration
public class AppConfig {
    private static final Logger logger = LoggerFactory.getLogger(AppConfig.class);

    /**
     * 自定义配置
     *
     * @return
     */
    @Bean
    public ExecutorStarterConfig cronJobExecutorStarterConfig() {
        ExecutorStarterConfig config = new ExecutorStarterConfig();
        config.setAddress("http://127.0.0.1:9527");
        config.setTenant("horace");
        config.setAppName("example-executor-starter");
        config.setAppDesc("Spring示例执行器");
        config.setTag("common");
        config.setSignKey("7d890a079948b196756rtf5452d2245t");
        return config;
    }
}
4. 新建启动类
/**
 * Created in 2025-01-01 21:00.
 *
 * @author Horace
 */
@EnableCronJob
@SpringBootApplication
public class ExampleSpringExecutor {
    private static final Logger logger = LoggerFactory.getLogger(ExampleSpringExecutor.class);

    public static void main(String[] args) {
        SpringApplication.run(ExampleSpringExecutor.class, args);
    }
}

注意:需要在启动类上加上@EnableCronJob注解,开启CronJob的自动配置。

三、Go语言版本

1. 引入github依赖
go get github.com/horacedh/cronjob-executor
2. 实现任务处理接口
// DemoTask 示例任务对象
type DemoTask struct {
}

// Handle 任务处理方法
func (d DemoTask) Handle(params *task.TaskParams) *task.HandlerResult {
	logger.Infof("task handle, params: %v", utils.ToJsonString(params))
	return task.Success()
}
3. 启动执行器
func main() {
	// 创建执行器客户端
    client := cronjob.GetExecutorClient(&bean.ExecutorOptions{
        Address: "http://127.0.0.1:9527",
        Tenant:  "horace",
        AppName: "go-example-executor",
        AppDesc: "Go示例执行器",
        Tag:     "common",
        SignKey: "7d890a079948b196756rtf5452d2245t",
    })
    
    // 添加任务
    client.AddTask(DemoTask{}, bean.TaskOptions{
        Cron: "* * * * * ? ",
        Name: "Go测试任务",
    })
    
    // 启动执行器
    client.Start()
}
最后更新