【Spring】Quartz定时器动态设置定时时间

Spring Quartz定时器动态设置定时时间

1、配置Spring配置文件(frams-quartz-context.xml):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	
	
	<!-- 定时下发定时器 -->
	<bean id="timingSendTimerAction" class="com.hy.pris.timer.action.TimingSendTimerAction">
	</bean>
	<bean id="timingSendTimerJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<!-- 调用的类  -->
		<property name="targetObject">
			<ref bean="timingSendTimerAction" />
		</property>
		<!-- 调用类中的方法  -->
		<property name="targetMethod">
			<value>doTimingSendTimer</value>
		</property> 
		<property  name ="concurrent"  value ="false"/>		
	</bean>
	<bean id="timingSendTimerTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail">
			<ref bean="timingSendTimerJob" />
		</property>
		<!-- cron表达式  -->
		<property name="cronExpression">
			<value>1 0 0 1 1 ? 2099</value>
		</property>
	</bean>	

	<!-- 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  -->
	<bean id="strQuartz" lazy-init="true" autowire="no" class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		<property name="triggers">
			<list>
				<ref bean="timingSendTimerTrigger"/>
			</list>
		</property>
	</bean>
	 
	<bean id="workOrderInfoDAO" class="com.hy.pris.gdgl.gdmx.dao.impl.TWorkOrderInfoDAOImpl"></bean>
	<bean id="setTimingSendTimeServiceImpl" class="com.hy.pris.timer.service.impl.SetTimingSendTimeServiceImpl"
		 lazy-init="false" init-method="setTimingSendTime">
	   <property name="scheduler" ref="strQuartz" />
	   <property name="workOrderInfoDAO" ref="workOrderInfoDAO"></property>
	</bean>
	
</beans>
2、设置定时时间Action(TimingSendTimerAction)
/**
 * 
 * 功能描述:定时下发
 * 
 * 创建人:Gansuper
 * 
 * 创建时间:2014-11-13 19:47
 *
 */
public class TimingSendTimerAction {
	
	/**
	 * Service注入
	 */
	@Autowired
	@Qualifier("timingSendTimerService")
	private TimingSendTimerService timingSendTimerService;

	/**
	 * 功能描述:执行定时下发操作
	 * 
	 * 输入参数:
	 * 
	 * 输出参数:
	 * 
	 * 创建时间:2014-11-13 19:56
	 */
	public void doTimingSendTimer(){
		System.out.println("定时下发开始!");
		this.timingSendTimerService.doTimingSendTimer();
		System.out.println("定时下发完成!");
	}
}
3、设置定时时间Service接口实现类
/**
 * 功能说明:设置下发定时时间service接口实现类
 * 
 * 创建人:Gansuper
 * 
 * 创建时间:2014-11-13 19:59
 *
 */
@Service("setTimingSendTimeService")
public class SetTimingSendTimeServiceImpl extends BaseServiceImpl implements SetTimingSendTimeService{

	/**
	 * workOrderInfoDAO
	 */
	private TWorkOrderInfoDAO workOrderInfoDAO;
	
	/**
	 * Scheduler
	 */
	private	Scheduler scheduler;
	
	/**
	 * 设置下发定时时间
	 */
	@Override
	public void setTimingSendTime() {
		try {
		
			if (scheduler == null || workOrderInfoDAO == null) {
				scheduler = (Scheduler) SpringContextUtil.getBean("strQuartz");
				workOrderInfoDAO = (TWorkOrderInfoDAO) SpringContextUtil.getBean("workOrderInfoDAO");
			}
			CronTriggerBean trigger = (CronTriggerBean) scheduler.getTrigger("timingSendTimerTrigger", Scheduler.DEFAULT_GROUP);
			String sendTime = this.workOrderInfoDAO.queryTimingSendTime();//获取数据库中的需设定的时间值
			
			if (sendTime == null) {
				return ;
			}
			sendTime = sendTime.substring(0, sendTime.lastIndexOf("."));
			String[] sendTimes = sendTime.split(" ")[1].split(":");
			String pushTime = sendTimes[2] + " " + sendTimes[1] + " " + sendTimes[0]+ " * * ? ";
			trigger.setCronExpression(pushTime);//设置定时器触发时间
			scheduler.rescheduleJob("timingSendTimerTrigger",Scheduler.DEFAULT_GROUP, trigger);
		} catch (SchedulerException e) {
			e.printStackTrace();
		} catch (java.text.ParseException e) {
			e.printStackTrace();
		}
	}

	public Scheduler getScheduler() {
		return scheduler;
	}

	public void setScheduler(Scheduler scheduler) {
		this.scheduler = scheduler;
	}

	public TWorkOrderInfoDAO getWorkOrderInfoDAO() {
		return workOrderInfoDAO;
	}

	public void setWorkOrderInfoDAO(TWorkOrderInfoDAO workOrderInfoDAO) {
		this.workOrderInfoDAO = workOrderInfoDAO;
	}

}
4、在前台输入需设置的时间值,并通过相关操作保存到数据库相应的表中。在保存定时时间成功之后,需调用setTimingSendTime()方法。完成以上步骤就可动态设置定时时间。



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值