本篇內容主要講解“怎么實現MainStarter”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么實現MainStarter”吧!
創(chuàng)新互聯公司專注于企業(yè)成都全網營銷推廣、網站重做改版、湘潭網站定制設計、自適應品牌網站建設、H5開發(fā)、商城網站定制開發(fā)、集團公司官網建設、外貿營銷網站建設、高端網站制作、響應式網頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為湘潭等各大城市提供網站開發(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>
public class MainStarter{ // 任務中心 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 { // 加載任務 public void loadTask(Task taskTracker); public List<Task> getTasks(); public void run(); public void terminate(); }
任務中心存儲任務,任務 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è)務需要實現此方法,方法中為具體業(yè)務 protected abstract void doRun() throws Exception; }
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(); } } } }
public class ZBTask extends Task{ public ZBTask () { TaskCenter taskCenter = TaskCenterSingleton.getInstance(); taskCenter.loadTask(this); } public void doRun() throws Exception { /* 具體業(yè)務實現,這里就能會定時執(zhí)行, * 若有需要還可以在此使用休眠, * 這樣只會把此線程掛起,不影響其他 Task 子類的執(zhí)行 */ } }
到此,相信大家對“怎么實現MainStarter”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續(xù)學習!
文章標題:怎么實現MainStarter
網頁地址:http://www.chinadenli.net/article16/gocidg.html
成都網站建設公司_創(chuàng)新互聯,為您提供外貿網站建設、ChatGPT、微信小程序、軟件開發(fā)、網站改版、定制開發(fā)
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯