package org.dromara.job.snailjob; import cn.hutool.core.thread.ThreadUtil; import cn.hutool.extra.spring.SpringUtil; import com.aizuda.snailjob.client.job.core.MapHandler; import com.aizuda.snailjob.client.job.core.annotation.JobExecutor; import com.aizuda.snailjob.client.job.core.annotation.MapExecutor; import com.aizuda.snailjob.client.job.core.dto.MapArgs; import com.aizuda.snailjob.common.log.SnailJobLog; import com.aizuda.snailjob.model.dto.ExecuteResult; import org.springframework.stereotype.Component; import java.util.List; import java.util.concurrent.TimeUnit; import java.util.stream.Collectors; import java.util.stream.IntStream; /** * Map任务 动态分配 只分片不关注结果 * * * @author 老马 */ @Component @JobExecutor(name = "testMapJobAnnotation") public class TestMapJobAnnotation { @MapExecutor public ExecuteResult doJobMapExecute(MapArgs mapArgs, MapHandler mapHandler) { // 生成1~200数值并分片 int partitionSize = 50; List> partition = IntStream.rangeClosed(1, 200) .boxed() .collect(Collectors.groupingBy(i -> (i - 1) / partitionSize)) .values() .stream() .toList(); SnailJobLog.REMOTE.info("端口:{}完成分配任务", SpringUtil.getProperty("server.port")); return mapHandler.doMap(partition, "doCalc"); } @MapExecutor(taskName = "doCalc") public ExecuteResult doCalc(MapArgs mapArgs) { List sourceList = (List) mapArgs.getMapResult(); // 遍历sourceList的每一个元素,计算出一个累加值partitionTotal int partitionTotal = sourceList.stream().mapToInt(i -> i).sum(); // 打印日志到服务器 ThreadUtil.sleep(3, TimeUnit.SECONDS); SnailJobLog.REMOTE.info("端口:{},partitionTotal:{}", SpringUtil.getProperty("server.port"), partitionTotal); return ExecuteResult.success(partitionTotal); } }