• 前置条件
  • 介绍
  • 使用
    • 消费端添加依赖
    • 消费端的配置
    • 添加消费端方法
    • 创建定时任务
  • @TimedTask定时任务
    • @TimedTask参数
    • @TimedTask使用

    前置条件

    在开始使用定时任务之前,要确保服务的choerodon-starters依赖在0.6.3.RELEASE版本及之上,推荐最新版0.11.0.RELEASE

    介绍

    定时任务基于quartz的数据库模式,位于asgard-service,消费端依赖于choerodon-starter-asgard。在页面上手动创建定时任务,定时任务支持简单定时任务和cron表达式定时任务,并指定消费端的特定方法去消费。如果下一次定时任务被触发,而上一条定时任务未被消费端执行,则该定时任务状态设置为失败。

    使用

    消费端添加依赖

    1. <dependency>
    2. <groupId>io.choerodon</groupId>
    3. <artifactId>choerodon-starter-asgard</artifactId>
    4. <version>${choerodon.starters.version}</version>
    5. </dependency>

    消费端的配置

    1. choerodon:
    2. schedule:
    3. consumer:
    4. enabled: true # 启用任务调度消费端
    5. thread-num: 1 # 任务调度消费线程数
    6. poll-interval-ms: 1000 # 拉取间隔,默认1000毫秒

    添加消费端方法

    • 服务启动后,asgard-service通过kafka消息监听服务启动后主动拉取@JobTask定义的方法。
    • @JobTask注解的方法参数必须为Map。
    • @JobParam为执行参数, 类型需要为String,Integer,Long,Double,Boolean之一,如果没有设置默认值则创建定时任务时必须指定方法参数。
    • @JobTask注解的方法返回值为Map或者为void。如果返回值为void则传入的参数为前端传入,不会改变;如果为Map,则下一次的执行参数为上一次执行的返回值,可以动态改变。
    1. @Component
    2. public class Task {
    3. private static final Logger LOGGER = LoggerFactory.getLogger(Task.class);
    4. @JobTask(code = "test",
    5. maxRetryCount = 2, params = {
    6. @JobParam(name = "isInstantly", defaultValue = "true", type = Boolean.class),
    7. @JobParam(name = "name", defaultValue = "zh"),
    8. @JobParam(name = "age", type = Integer.class)
    9. })
    10. public Map<String, Object> test(Map<String, Object> data) {
    11. LOGGER.info("data {}", data);
    12. Object age = data.get("age");
    13. if (age != null) {
    14. data.put("age", (Integer)age + 1);
    15. }
    16. return data;
    17. }
    18. }

    创建定时任务

    在前端页面的任务调度 –> 任务明细 –> 创建任务,填入任务执行参数以及扫描到的服务执行方法后创建任务。

    @TimedTask定时任务

    @JobTask只是定义一个可执行程序,具体触发时间要在前端页面创建定时任务,而@TimedTask注解可以定义一个带有触发时间的可执行程序,无需在页面创建

    @TimedTask参数

    1. public @interface TimedTask {
    2. /**
    3. * 定时任务名称
    4. */
    5. String name();
    6. /**
    7. * 定时任务描述
    8. */
    9. String description();
    10. /**
    11. * 是否只执行一次,true:只执行一次;false:每次部署时执行一次
    12. */
    13. boolean oneExecution();
    14. /**
    15. * 方法执行参数
    16. */
    17. TaskParam[] params();
    18. /**
    19. * simple-trigger的重复次数
    20. */
    21. int repeatCount();
    22. /**
    23. * simple-trigger的重复间隔值:重复间隔形如 '100SECONDS' 则为100
    24. */
    25. long repeatInterval();
    26. /**
    27. * simple-trigger的重复间隔单位:重复间隔形如 '100SECONDS' 则为SECONDS
    28. */
    29. QuartzDefinition.SimpleRepeatIntervalUnit repeatIntervalUnit();
    30. }

    @TimedTask使用

    1. @Component
    2. public class Task {
    3. @TimedTask(name = "同步LDAP用户", description = "自定义定时任务", oneExecution = true,
    4. repeatCount = 0, repeatInterval = 100, repeatIntervalUnit = QuartzDefinition.SimpleRepeatIntervalUnit.HOURS, params = {
    5. @TaskParam(name = "organizationCode", value = "hand")
    6. })
    7. public void syncLdapUserSite(Map<String, Object> map) {
    8. // 执行方法
    9. }
    10. }