TestAddRealtimeJob.java 3.65 KB
package com.yoho.kisjob.demo;

import java.util.Calendar;
import java.util.Date;

import javax.annotation.PostConstruct;

import lombok.extern.slf4j.Slf4j;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.yoho.kisjob.common.meta.JobMeta;
import com.yoho.kisjob.common.meta.JobMetaBuilder;
import com.yoho.kisjob.common.meta.JobRunType;
import com.yoho.kisjob.common.meta.JobType;
import com.yoho.kisjob.common.meta.TimerMetaBuilder;
import com.yoho.kisjob.common.utils.NodeUtil;
import com.yoho.kisjob.common.utils.RandomUtils;
import com.yoho.kisjob.jobnode.node.NodeRegister;
import com.yoho.kisjob.reg.core.RegistryCenter;

@Service
@Slf4j
public class TestAddRealtimeJob {

	@Autowired
	private RegistryCenter registryCenter;

	@Autowired
	private NodeRegister nodeRegister;

	@PostConstruct
	public void doAdd() {
		log.info("Start an async thread to insert jobs.");
		new Thread(new AsyncThread()).start();
	}

	class AsyncThread implements Runnable {
		@Override
		public void run() {
			log.info("Start to insert jobs.");
			int i = 1;
			while (i++ < 100) {
				try {
					Thread.sleep(60000L);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}

				if (i % 4 == 0) {
					addRealtimeJob();
				} else if (i % 4 == 1) {
					addDistributedCronJob();
				} else if (i % 4 == 2) {
					addEveryDayJob();
				} else {
					addDistributedJob();
				}
			}
		}

		private void addRealtimeJob() {
			JobMeta jobMeta = JobMetaBuilder
					.newJob(nodeRegister.getNodeGroup(),
							"job_demo_" + NodeUtil.getCurrentNodeIp() + "_" + RandomUtils.getRandom())
					.jobType(JobType.SingleJob).description("This is a auto-generated realtime job.")
					.jobRef("testBaseJob").withTimer(TimerMetaBuilder.newTimer(JobRunType.RealtimeJob).build()).build();
			registryCenter.registerJob(jobMeta);
		}

		private void addEveryDayJob() {
			// 建一个每天执行的定时任务 执行时间为当前时间往后移5分钟
			Date currentDate = new Date();
			Calendar c = Calendar.getInstance();
			c.setTime(currentDate);
			c.add(Calendar.MINUTE, 5);
			StringBuffer sb = new StringBuffer();
			sb.append(c.get(Calendar.SECOND)).append(" ").append(c.get(Calendar.MINUTE)).append(" ")
					.append(c.get(Calendar.HOUR_OF_DAY)).append(" * * ?");

			JobMeta jobMeta = JobMetaBuilder
					.newJob(nodeRegister.getNodeGroup(),
							"job_demo_" + NodeUtil.getCurrentNodeIp() + "_" + RandomUtils.getRandom())
					.jobType(JobType.SingleJob).description("This is a auto-generated daily job.")
					.jobRef("testBaseJob")
					.withTimer(TimerMetaBuilder.newTimer(JobRunType.CronJob).cron(sb.toString()).build()).build();
			registryCenter.registerJob(jobMeta);
		}

		private void addDistributedJob() {
			JobMeta jobMeta = JobMetaBuilder
					.newJob(nodeRegister.getNodeGroup(),
							"job_distributed_" + NodeUtil.getCurrentNodeIp() + "_" + RandomUtils.getRandom())
					.jobType(JobType.ElastaicJob).description("This is a auto-generated distributed job.")
					.mapper("testMapper").executor("testExecutor")
					.withTimer(TimerMetaBuilder.newTimer(JobRunType.RealtimeJob).build()).build();
			registryCenter.registerJob(jobMeta);
		}

		private void addDistributedCronJob() {
			JobMeta jobMeta = JobMetaBuilder
					.newJob(nodeRegister.getNodeGroup(),
							"job_distributed_" + NodeUtil.getCurrentNodeIp() + "_" + RandomUtils.getRandom())
					.jobType(JobType.ElastaicJob).description("This is a auto-generated distributed cron job.")
					.mapper("testMapper").executor("testExecutor")
					.withTimer(TimerMetaBuilder.newTimer(JobRunType.CronJob).cron("0 * * * * ?").build()).build();
			registryCenter.registerJob(jobMeta);
		}
	}

}