精华内容
下载资源
问答
  • 定时任务停止OfficeTaskV6.0.0.6
  • 微信机器人开发SDK使用教程--养号任务停止 case "PostStopWeChatMaintenanceTask": {// 养号任务停止 log.debug("websocket:msgtype=PostStopWeChatMaintenanceTask。。。。。"); ...

    微信机器人开发SDK使用教程--养号任务停止

    case "PostStopWeChatMaintenanceTask": {// 养号任务停止
    log.debug("websocket:msgtype=PostStopWeChatMaintenanceTask。。。。。");
    postStopWeChatMaintenanceTaskWebsocketHandler.handleMsg(ctx, vo, contentJsonStr);
    break;
    }

    package com.jubotech.framework.netty.handler.websocket;

    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Service;

    import com.google.protobuf.util.JsonFormat;
    import com.jubotech.framework.netty.common.Constant;
    import com.jubotech.framework.netty.utils.MessageUtil;
    import com.jubotech.framework.netty.utils.NettyConnectionUtil;

    import Jubo.JuLiao.IM.Wx.Proto.PostStopWeChatMaintenanceTask.PostStopWeChatMaintenanceTaskMessage;
    import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass.EnumErrorCode;
    import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass.EnumMsgType;
    import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass.TransportMessage;
    import io.netty.channel.ChannelHandlerContext;

    @Service
    public class PostStopWeChatMaintenanceTaskWebsocketHandler{
    private final Logger log = LoggerFactory.getLogger(getClass());
    /**
    * 养号任务停止---pc端经过服务端转发给手机端
    * @author wechatno:tangjinjinwx
    * @param ctx
    * @param vo
    */
    public void handleMsg(ChannelHandlerContext ctx, TransportMessage vo, String contentJsonStr) {
    try {
    log.info(contentJsonStr);
    PostStopWeChatMaintenanceTaskMessage.Builder bd = PostStopWeChatMaintenanceTaskMessage.newBuilder();
    JsonFormat.parser().merge(contentJsonStr, bd);
    PostStopWeChatMaintenanceTaskMessage req = bd.build();
    //将消息转发送给手机客户端
    ChannelHandlerContext cx= NettyConnectionUtil.getClientChannelHandlerContextByUserId(req.getWeChatId());
    if(null != cx){
    MessageUtil.sendMsg(cx, EnumMsgType.PostStopWeChatMaintenanceTask, NettyConnectionUtil.getNettyId(ctx), null, req);
    //告诉发送方消息已收到
    MessageUtil.sendJsonMsg(ctx, EnumMsgType.MsgReceivedAck, vo.getAccessToken(), vo.getId(), null);
    }else{
    // 对方不在线
    MessageUtil.sendJsonErrMsg(ctx, EnumErrorCode.TargetNotOnline, Constant.ERROR_MSG_NOTONLINE);
    }

        } catch (Exception e) {
            e.printStackTrace();
            MessageUtil.sendJsonErrMsg(ctx, EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL);
        }
    }

    }

    项目地址:https://www.wuliaokankan.cn/url301/138.html
    接口参考:http://www.yunlauncher.com/Blog/articles/119.html

    转载于:https://www.cnblogs.com/wuliaokankan/p/10655936.html

    展开全文
  • Jenkins关联任务停止

    2019-08-30 14:32:32
    停止Jenkins关联任务的方法参考如下链接: https://stackoverflow.com/questions/21021905/how-to-stop-a-build-in-jenkins-via-the-rest-api/42618088#42618088
    展开全文
  • 本文通过一次Oracle Job任务异常案例诊断,分析其原因及解决过程,从内部揭示Oracle Job任务调度及内部计时机制。
  • 只使用spring容器生成 Scheduler 调度器对象 ,添加任务、删除任务停止任务、启动任务全部使用quartz框架的方法及类。 通过下面的类对调度器中的任务及触发器进行操作 Scheduler对象从spring中获取 JobInfo...

    只使用spring容器生成 Scheduler   调度器对象  ,添加任务、删除任务、停止任务、启动任务全部使用quartz框架的方法及类。

    通过下面的类对调度器中的任务及触发器进行操作    Scheduler对象从spring中获取   JobInfo对象为自定义的任务信息。

    QuartzJob 是自定义的实现quartz的Job接口的任务,类中编写自己的业务逻辑。
    /**
     * 对quartz调度器中的任务进行操作
     *
     * @author Administrator
     *
     */
    public class ScheduleJob {

        /**
         * 将任务上下文中的任务添加quartz的调度器
         *
         * @param s
         * @throws SchedulerException
         */
        public void schedule(Scheduler s) throws SchedulerException {
            // 获取任务信息
            List<JobInfo> infoList = JobDataContext.getJobInfoList();
            for (JobInfo info : infoList) {
                this.addJob2Scheduler(s, info);
            }
        }
        /**
         * 将任务添加到quartz调度器
         * @param s
         * @param info
         * @throws SchedulerException
         */
        public void addJob2Scheduler(Scheduler s,JobInfo info) throws SchedulerException
        {
            TriggerKey triggerKey = TriggerKey.triggerKey(info.getJobName(),
                    info.getJobGroup());
            CronTrigger cronTrigger = (CronTrigger) (s.getTrigger(triggerKey));
            if (cronTrigger == null) {
                // 任务未添加到调度器
                JobDetail jobDetail = JobBuilder.newJob(QuartzJob.class)
                        .withIdentity(info.getJobName(), info.getJobGroup())
                        .build();
                jobDetail.getJobDataMap().put("jobinfo", info);
                CronScheduleBuilder cs = CronScheduleBuilder.cronSchedule(info
                        .getCronExpression());
                Trigger trigger = TriggerBuilder.newTrigger()
                        .withIdentity(info.getJobName(), info.getJobGroup())
                        .withSchedule(cs).build();
                trigger.getJobDataMap().put("jobinfo", info);
                s.scheduleJob(jobDetail, trigger);
            } else {
                // 任务已经添加更新crontrigger
                CronScheduleBuilder cs = CronScheduleBuilder.cronSchedule(info
                        .getCronExpression());
                Trigger trigger = TriggerBuilder.newTrigger()
                        .withIdentity(info.getJobName(), info.getJobGroup())
                        .withSchedule(cs).build();
                s.rescheduleJob(triggerKey, trigger);
            }
        }
        /**
         * 获取quartz中计划的任务
         * @param scheduler
         * @return
         * @throws SchedulerException
         */
        public List<JobInfo> getPlainJobinScheduler(Scheduler scheduler) throws SchedulerException
        {
            GroupMatcher<JobKey> matcher = GroupMatcher.anyJobGroup();
            Set<JobKey> jobKeys = scheduler.getJobKeys(matcher);
            List<JobInfo> jobInfoList = new ArrayList<JobInfo>();
            for (JobKey jobKey : jobKeys) {
                List<? extends Trigger> triggers = scheduler
                        .getTriggersOfJob(jobKey);
                for (Trigger trigger : triggers) {
                    JobInfo oldinfo = (JobInfo)trigger.getJobDataMap().get("jobinfo");
                    JobInfo jobinfo = new JobInfo();
                    jobinfo.setJobName(jobKey.getName());
                    jobinfo.setJobGroup(jobKey.getGroup());
                    jobinfo.setJobId(oldinfo.getJobId());
                    jobinfo.setCronExpression(oldinfo.getCronExpression());
                    jobinfo.setJobDesc("触发器:" + trigger.getKey());
                    jobinfo.setJobTable(oldinfo.getJobTable());
                    jobinfo.setJobType(oldinfo.getJobType());
                    jobinfo.setJobSql(oldinfo.getJobSql());
                    Trigger.TriggerState triggerState = scheduler
                            .getTriggerState(trigger.getKey());
                    jobinfo.setJobStatus(triggerState.name());
                    if (trigger instanceof CronTrigger) {
                        CronTrigger cronTrigger = (CronTrigger) trigger;
                        String cronExpression = cronTrigger.getCronExpression();
                        jobinfo.setCronExpression(cronExpression);
                    }
                    jobInfoList.add(jobinfo);
                }
            }
            return jobInfoList;
        }
        /**
         * quartz调度器暂停任务调度
         * @param s
         * @param jobinfo
         * @throws SchedulerException
         */
        public void pauseJob(Scheduler s,JobInfo jobinfo) throws SchedulerException
        {
            JobKey jobKey = JobKey.jobKey(jobinfo.getJobName(), jobinfo.getJobGroup());
            s.pauseJob(jobKey);
        }
        /**
         * quartz调度器恢复任务调度
         * @param s
         * @param jobinfo
         * @throws SchedulerException
         */
        public void resumeJob(Scheduler s,JobInfo jobinfo) throws SchedulerException
        {
            JobKey jobKey = JobKey.jobKey(jobinfo.getJobName(), jobinfo.getJobGroup());
            s.resumeJob(jobKey);
        }
        /**
         * quartz调度器删除任务
         * @param s
         * @param jobinfo
         * @throws SchedulerException
         */
        public void deleteJob(Scheduler s,JobInfo jobinfo) throws SchedulerException
        {
            JobKey jobKey = JobKey.jobKey(jobinfo.getJobName(), jobinfo.getJobGroup());
            s.deleteJob(jobKey);
        }
        /**
         * quartz调度器立刻运行任务(只运行一次,随机生成Trigger)
         * @param s
         * @param jobinfo
         * @throws SchedulerException
         */
        public void runJobOneTime(Scheduler s,JobInfo jobinfo) throws SchedulerException
        {
            JobKey jobKey = JobKey.jobKey(jobinfo.getJobName(), jobinfo.getJobGroup());
            s.triggerJob(jobKey);
        }
    }

    展开全文
  • 本文不分析操作符的使用方法,主要分析interval轮询中如何来停止。 最近在项目中使用RxJava,RxAndroid;主要运用于网络请求,但是项目中有用到定时任务,每隔20s去更新数据,因此想到RxJava中有定时器操作符,再...

    本文不分析操作符的使用方法,主要分析interval轮询中如何来停止。

    最近在项目中使用RxJava,RxAndroid;主要运用于网络请求,但是项目中有用到定时任务,每隔20s去更新数据,因此想到RxJava中有定时器操作符,再加上已经引入RxJava,链式请求就完成了,详见代码:

    Observable.interval(0, 20, TimeUnit.SECONDS)
    	.doOnSubscribe {
    		mDisposable = it
    	}
    	.flatMap {
    		return@flatMap DataUtils.API_SERVICE.getQrCode(userId)
    	}
    	.map {
    		val body = it.string()
    		val str = body.substring(body.indexOf(",") + 1)
    		val decodedString = Base64.decode(str, Base64.DEFAULT)
    		return@map BitmapFactory.decodeByteArray(decodedString, 0, decodedString.size)
    	}
    	.compose(ThreadFromUtils.defaultSchedulers())
    	.subscribe({
    		dismissProgressDialog()
    		qr_code.setImageBitmap(it)
    	}, {
    		dismissProgressDialog()
    		var msg = when (it) {
    			is SocketTimeoutException -> "网络连接超时!"
    			is ConnectException -> "连接不上服务器,请检查网络链接!"
    			is IOException -> "流连接意外结束,请稍候重试!"
    			is HttpException -> "网络出现异常,请稍候重试!"
    			is JsonSyntaxException -> "数据解析出现错误!"
    			else -> it.localizedMessage
    		}
    		if (msg.isNullOrEmpty()) {
    			msg = "出现错误,请稍候重试!"
    		}
    		showErrorToast(msg)
    	})
    

    竟然么有Kotlin选项,将就看看吧。链式请求也在项目中运用很多,这里用到flatmap和map:flatmap主要返回获取二维码请求->然后在map中生成bitmap->最后展示。这种方法看着舒服,但是也有问题:当接收到error的时候,定时器就会退出。因此不得不改变写法,详见代码:

    Observable.interval(0, 20, TimeUnit.SECONDS)
    	.doOnSubscribe {
    		mDisposable = it
    	}
    	.subscribeOn(Schedulers.computation())
    	.observeOn(AndroidSchedulers.mainThread())
    	.subscribe {
    		refreshQrCode()
    	}
    

    就是把获取二维码代码的请求在定时器每发送一次onNext中去执行,这样就解决了当接收到error的时候,定时器就会退出的问题。但是测试提出Bug说,离开这个页面还在刷新二维码数据。因此不得不在onPause里面把mDisposable.cancel()取消掉,如果可以也就万事大吉了,不想还引出一个Bug,心里那个憋屈吖,只能打碎牙齿往肚子里咽。Bug截图如图示:
    Bug图片

    经细看是因为刷新二维码都会有一个弹框等待,由于Activity已经销毁,所以Dialog add window 失败。
    想着先骗过测试吧,于是在获取二维码数据时,增加了一个判断,if(activity != null && !activity!!.isFinishing)时去获取,否则不获取。

    这样只是应付测试,自己还要找结局方案,于是搜索Observable interval stop,在StackOverflow是找到解决方案,最后修改为,详见代码:

    Observable.interval(0, 20, TimeUnit.SECONDS, AndroidSchedulers.mainThread())
    	.takeWhile {
    		!mStop
    	}
    	.subscribe {
    		refreshQrCode()
    	}
    

    mStop是是否停止标志,在onResume()中赋值为false,在onPause()中赋值为true,然后测试没有再打印日志,应该是停止了,再次进入时又重新打印日志。至此停止定时任务以及延申的文图都解决,在此记录一下,希望对采坑的朋友有帮助。

    展开全文
  • 我用timer写了一个定时任务停止和重新启动的,使用@Autowired来注入CusTask timer使用end方法销毁后重启不了,但是如果去掉@Autowired注入 改成new CusTask();就可以实现停止与重新启动了,但是new CusTask();里面的@...
  • >> error.log echo `date "+%Y-%m-%d %H:%M:%S"` "程序重新启动..." >> error.log echo -e "\n" >> error.log Spark 提交命令 fi [root@bigdata-1 ~]$ chmod 777 appRestart.sh 配置定时任务调用重启脚本 */1 * * * ...
  • 多线程应用里, 线程基本上都是出自线程池, 那么基本不能使用pthread_cancel这类API, 因为它会终止线程运行, 线程终止后不能再次循环使用, 这对性能要求高的软件时基本是不会用pthread_cancel来停止逻辑运行的.2....
  • Oracle 定时任务: 1、DBMS_JOBS: dbms_jobs只是jobs对象的一个实例, 就像对于tables, emp和dept都是表的实例。 可以通过视图 SELECT * FROM DBA_JOBS; SELECT * FROM DBA_JOBS_RUNNING; SELECT * FROM all...
  • quartz任务停止最佳实践方式

    千次阅读 2018-03-06 14:11:12
    The best way to know for sure is to send a SIGQUIT (kill -3) program and analyze the output to see which thread is still running. It is very likely that your job (which runs on top of one of Quartz t...
  • 1. 方式 1:通过Spring 的ScheduledAnnotationBeanPostProcessor 类终止定时任务 代码示例: /*得到BeanPostProcessor,用于终止定时任务*/ @Autowired private ScheduledAnnotationBeanPostProcessor post...
  • 其主要提供了schedule,scheduleAtFixedRate,scheduleWithFixedDelay三个方法,分别用于延迟执行任务,特定频率周期性执行任务,特定延迟周期性执行任务。 public interface ScheduledExecutorS...
  • 为Callable任务设置超时的可行做法如下:I. 保留提交任务时所返回的Future对象Future future = exec.submit(task);II. 设置等待任务返回结果的超时时间int timeout = 5;future.get(timeout, TimeUnit.SECONDS);III. ...
  • Oracle诊断案例-Job任务停止执行

    千次阅读 2004-11-22 09:20:00
    Oracle诊断案例-Job任务停止执行Last Updated: Saturday, 2004-11-20 12:47 Eygle 昨天接到研发人员报告,数据库定时任务未正常执行,导致某些操作失败。开始介入处理该事故.系统环境:SunOS DB 5.8 Generic_108528-...
  • Oracle诊断案例-Job任务停止执行Last Updated: Friday, 2004-11-26 9:48 Eygle 昨天接到研发人员报告,数据库定时任务未正常执行,导致某些操作失败。开始介入处理该事故.系统环境:SunOS DB 5.8 Generic_108528-21 ...
  • 一、概述ScheduledExecutorService继承于ExecutorService,主要提供任务的延迟和周期性执行的功能。其主要提供了schedule,scheduleAtFixedRate,scheduleWithFixedDelay三个方法,分别用于延迟执行任务,以特定频率...
  • new Timer().scheduleAtFixedRate(new TimerTask() {@Overridepublic void run() {System.out.println("run");...输出:run(抛出异常)问题在于:我需要一个计时器任务来检查数据库中的特定条件(或其他).它工作正...
  • 一、概述ScheduledExecutorService继承于ExecutorService,主要提供任务的延迟和周期性执行的功能。其主要提供了schedule,scheduleAtFixedRate,scheduleWithFixedDelay三个方法,分别用于延迟执行任务,以特定频率...
  • 最早用scanmail3.0 的时候,不懂可以设置,而且2.6也没有这样子的设置,于是出问题的时候找遍天下就是不知道问题出在哪里,后来高人指点后,才知道3.0后就有新产生一个选项是说:在mail scan task停止时就停止del

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 9,313
精华内容 3,725
关键字:

任务停止