怎么实现MainStarter

本篇内容主要讲解“怎么实现MainStarter”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么实现MainStarter”吧!

创新互联公司专注于企业成都全网营销推广、网站重做改版、湘潭网站定制设计、自适应品牌网站建设、H5开发商城网站定制开发、集团公司官网建设、外贸营销网站建设、高端网站制作、响应式网页设计等建站业务,价格优惠性价比高,为湘潭等各大城市提供网站开发制作服务。

Quartz触发器配置

从触发器中配置一个通用触发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>

统一任务处理

MainStarter的实现

主要是任务中心来执行的

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 为代码最终执行

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;
	}

	// 子类业务需要实现此方法,方法中为具体业务
	protected abstract void doRun() throws Exception;
}

具体业务实现

TaskCenter 的实现类 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 {
		/* 具体业务实现,这里就能会定时执行,
		 * 若有需要还可以在此使用休眠,
		 * 这样只会把此线程挂起,不影响其他 Task 子类的执行
		 */
	}

}

到此,相信大家对“怎么实现MainStarter”有了更深的了解,不妨来实际操作一番吧!这里是创新互联网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

文章标题:怎么实现MainStarter
网页地址:https://www.cdcxhl.com/article16/gocidg.html

成都网站建设公司_创新互联,为您提供外贸网站建设ChatGPT微信小程序软件开发网站改版定制开发

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设公司