溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

怎么實現(xiàn)MainStarter

發(fā)布時間:2021-11-16 16:15:23 來源:億速云 閱讀:114 作者:iii 欄目:大數(shù)據(jù)

本篇內(nèi)容主要講解“怎么實現(xiàn)MainStarter”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“怎么實現(xiàn)MainStarter”吧!

Quartz觸發(fā)器配置

從觸發(fā)器中配置一個通用觸發(fā)MainStarter

<bean id="mainStarter" class="com.zb.timer.MainStarter" >
</bean>
    
<bean id="mainStarterDetail" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
	<property name="targetObject" ref="mainStarter" />
	<property name="targetMethod" value="run" />
	<property name="concurrent" value="false" />
</bean>
<bean id="mainStarterTrigger" class="org.springframework.scheduling.quartz.SimpleTriggerFactoryBean">
	<property name="jobDetail" ref="mainStarterDetail" />
	<property name="startDelay" value="10000" />
	<property name="repeatCount" value="0" /> 
</bean>
	
<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
	<property name="triggers">
		<list>
			<ref bean="mainStarterTrigger" />  
		</list>
	</property>
</bean>

統(tǒng)一任務(wù)處理

MainStarter的實現(xiàn)

主要是任務(wù)中心來執(zhí)行的

public class MainStarter{

	// 任務(wù)中心
	private TaskCenter taskCenter;
	
	public void setTaskCenter(TaskCenter taskCenter) {
		this.taskCenter = taskCenter;
	}

	public void run() {
		if(taskCenter==null) {
			taskCenter = new TaskCenterSupport();
		}
		taskCenter.run();
	}
}
public interface TaskCenter {
	// 加載任務(wù)
	public void loadTask(Task taskTracker);
	
	public List<Task> getTasks(); 
	
	public void run();
	
	public void terminate();
	
}

任務(wù)中心存儲任務(wù),任務(wù) Task 為代碼最終執(zhí)行

public abstract class Task extends Thread {
	private boolean isAlive = true;

	@Override
	public void run() {
		while (isAlive) {
			try {
				doRun();
			} catch (Exception e) { 
				logger.error("run task error.", e);
			}
		}
	}

	public void setAlive(boolean isAlive) {
		this.isAlive = isAlive;
	}

	// 子類業(yè)務(wù)需要實現(xiàn)此方法,方法中為具體業(yè)務(wù)
	protected abstract void doRun() throws Exception;
}

具體業(yè)務(wù)實現(xiàn)

TaskCenter 的實現(xiàn)類 TaskCenterSupport

public class TaskCenterSupport implements TaskCenter {
	private List<Task> tasks;
	
	public List<Task> getTasks() {
		return tasks;
	}

	public void loadTask(Task task) {
		if (tasks == null) {
			tasks = new ArrayList<>();
		}
		
		tasks.add(task);
	}
	
	public void run() {
		if(CollectionUtils.isNotEmpty(tasks)){
			for (Task task : tasks) {
				if(task != null) {
					task.setAlive(true);
					task.start();
				}
			}
		}
	}
	
	public void terminate() {
		if(CollectionUtils.isNotEmpty(tasks)){
			for (Task task : tasks) {
				if(task != null) {
					task.setAlive(false);
				}
			}
			
			tasks.clear();
			try {
				Thread.sleep(5000);
			} catch (InterruptedException e) {
				logger.error(e.getMessage(),e);
				Thread.currentThread().interrupt();
			}
		}
	}
}

Task 的子類 ZBTask

public class ZBTask extends Task{ 
	
	public ZBTask () {
		TaskCenter taskCenter = TaskCenterSingleton.getInstance();
		taskCenter.loadTask(this);
	}
	
	public void doRun() throws Exception {
		/* 具體業(yè)務(wù)實現(xiàn),這里就能會定時執(zhí)行,
		 * 若有需要還可以在此使用休眠,
		 * 這樣只會把此線程掛起,不影響其他 Task 子類的執(zhí)行
		 */
	}

}

到此,相信大家對“怎么實現(xiàn)MainStarter”有了更深的了解,不妨來實際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI