java 动态启停定时器

最近做项目需要实现一个功能与终端进行通信下发配置,没得到响应开启定时器再次下发知道收到结果。下面说下我实现的方式

定义一个获取future实例的类

@Service
@Transactional
public class ModemConfigurationService {

	protected static ScheduledFuture<?> future;
    
        //从配置文件中获取Cron表达式
        @Value("${sendAccessAgainCron}")
	private String sendAccessAgainCron;

        public static ScheduledFuture<?> getInstance() {
		if (future != null) {
			return future;
		}
		return null;
	}

        //开启定时器
    	public void startScheduSendParamAgain() {

	future = threadPoolTaskScheduler.schedule(new SendModemConfigJobRun(), new Trigger() {
				
		@Override
		public Date nextExecutionTime(TriggerContext triggerContext) {
			return new CronTrigger(sendAccessAgainCron).nextExecutionTime(triggerContext);
		    }
	    });
	}
    
}
  • 定义执行任务的类:
public class SendModemConfigJobRun implements Runnable{

    private Logger logger = LoggerFactory.getLogger(SendModemConfigJobRun.class);
	//执行自己的业务代码
	@Override
	public void run() {
		try {
			String localIp = GetIpAddress.getLocalIP();
			
			callBackImpl = new MediaPluginCallBackImpl();
			//加载终端插件
			int ccPlugin = MediaPluginlibrary.INSTANTCE.LoadCCPlugin(localIp, callBackImpl);
			logger.info("init MediaPluginJobRun ccPluginResult:"+ ccPlugin);
			if(ccPlugin >=0) {
				//关闭定时器
				stopLoadMediaPluginJob();
			}
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("Send Save Access Param error", e);
		}
	}

        //停止定时器
	public void stopSendParamJob() {
		ScheduledFuture<?> future = ModemConfigurationService.getInstance();
		if(future != null) {
			future.cancel(true);
		}
	}

}

好了,这样就结束了,端午节快乐!!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值