简单的spring任务调度

简单的spring任务调度

    上周的功能需求要用到定时任务,开始时用csdn上搜索到的也能实现,但是就我目前的项目来说还是略显笨重,我只需要简单点的定时任务就可以了,所以本周又重新简化了下,以下是Java代码:

    思路:建一个存储任务相关信息的表,使用spring的任务调度间隔5分钟读取此表,我的任务分为每天、每周、每月的,表里存储的有执行时间,当定时任务读取的执行时间在当前时间的5分钟内就执行此任务。

    表:

    CREATE TABLE project
    (
        project_id SERIAL NOT NULL,
        project_name VARCHAR(255),
        exe_type INTEGER,
        time_period VARCHAR(255),
        description VARCHAR(255),
        last_modified_user VARCHAR(255),
        last_modified_time VARCHAR(255),
        execute_time VARCHAR(255),
        flag INTEGER,
        PRIMARY KEY (project_id)
    );

    applicationContext.xml

<!-- spring自动任务调度器配置 -->
	<!-- 要调用的工作类 -->
	<bean id="quartzJob"
		class="com.sgcc.epri.dcloud.datacheckservice.service.impl.AutoExcuteCheck"></bean>

<bean id="jobtask" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> 
		<!-- 调用的类  -->
		<property name="targetObject"> <ref bean="quartzJob" /> </property> 
		<!-- 调用类中的方法 -->
		<property name="targetMethod"> 
		<value>autoExcuteCheck</value> 
		</property> 
		<!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程  -->
		<property name="concurrent" value="false" /> 
	</bean>
	<!-- 触发器配置 时间指定 -->
	<bean id="cronTrigger" class="org.springframework.scheduling.quartz.CronTriggerFactoryBean"> 
		<property name="jobDetail" ref="jobtask"></property>
			<!--  cron表达式  -->
			 <property name="cronExpression"> 
			<!-- 每隔10秒执行一次  -->
			<!-- <value>0/10 * * * * ?</value>  -->
			<!-- 每天每隔5分钟执行一次  -->
			<value>0 0/5 * * * ?</value> 
			<!-- 每天上午8点执行一次  -->
			<!-- <value>0 0 8 * * ?</value> 
			<value>0 0 0 * * ?</value>  -->
			<!-- 在每天下午16点到下午16:59期间的每1分钟触发  -->
			<!-- <value>0 * 16 * * ?</value>  -->
		</property> 
	</bean>

<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序 -->
	<bean id="startQuertz" lazy-init="false" autowire="no"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<!-- 触发器列表 -->
				<ref bean="cronTrigger" />
			</list>
		</property>
	</bean>
    AutoExcuteCheck.java
public class AutoExcuteCheck {
	@Autowired
	private DBQueryService dbQueryService;
	@Autowired
	private CheckProcessService checkProcessService;

	
	/**
	 * @brief    : 读取定时校验库执行定时校验   
	 */
	public void autoExcuteCheck() throws ParseException {
		System.out.println("读取自动校验配置*************************");
		Map<String, Object> map_db_info = new HashMap<String, Object>();
		map_db_info.put("table_name", ConfAppSet.getConfDBTableName("CHECK_PROJECT"));
		map_db_info.put("col_name", " * ");
		map_db_info.put("condition_add", " AND EXE_TYPE = 1 AND FLAG = 1 ");
		List<Map<String,Object>> list = dbQueryService.getResultList(map_db_info);
		if (list != null && list.size() > 0)
		{
			for (Map<String, Object> map : list)
			{
				String time_period = map.get("TIME_PERIOD").toString();
				String execute_time = map.get("EXECUTE_TIME").toString();
				int exeTime = 0;
				if (org.apache.commons.lang.StringUtils.isNotEmpty(execute_time))
				{
					String replace = execute_time.replace(":", "");
					exeTime = Integer.valueOf(replace);
					
				}
				int beforeFive = DateUtil.getCurrentTimeBeforeFive();
				int nowTime = DateUtil.getCurrentTimeNow();
				//每天执行的任务
				if (org.apache.commons.lang.StringUtils.isNotEmpty(time_period) && time_period.equals("everyday"))
				{
					//定时扫描check_project任务表是5分钟扫描一次,所以这里判断执行时间是否在前五分钟范围
					if (beforeFive <= exeTime && exeTime < nowTime)
					{
						checkProcessService.checkProcess(checkRules);
					}
				//每周某天执行的
				} else if (org.apache.commons.lang.StringUtils.isNotEmpty(time_period) && time_period.contains("星期")) {
					String week = DateUtil.getWeek();
					if (org.apache.commons.lang.StringUtils.isNotEmpty(week) && week.equals(time_period))
					{
						if (beforeFive <= exeTime && exeTime < nowTime)
						{
							checkProcessService.checkProcess(checkRules);
						}
					}
				//每月某天执行的
				} else if (org.apache.commons.lang.StringUtils.isNotEmpty(time_period)) {
					int periodDay = Integer.valueOf(time_period);
					int todayDay = DateUtil.getTodayDay();
					if (periodDay == todayDay)
					{
						if (beforeFive <= exeTime && exeTime < nowTime)
						{
							checkProcessService.checkProcess(checkRules);
						}
					}
				}
			} 
		}
	}
}
以上就是我的简单的spring任务调度实现


内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://bjspace.net/post/43

相关推荐

发表吐槽

你肿么看?

你还可以输入 250 / 250 个字

嘻嘻 大笑 可怜 吃惊 抛媚眼 调皮 鄙视 示爱 哭 开心 偷笑 嘘 奸笑 委屈 抱抱 Dog 大兵 威武

评论信息框

吃奶的力气提交吐槽中...


既然没有吐槽,那就赶紧抢沙发吧!