精华内容
下载资源
问答
  • 1. 定时任务在多个服务器的并行执行方法,其特征在于, 其中,各服务器节点分别生成各自的任务实例并且为各服务器节点配置相同的定时 时间,当达到所述定时时间时,各服务器节点分别启动任务实例以发送签到...

    1. 一种定时任务在多个服务器的并行执行方法,其特征在于, 其中,在各服务器节点分别生成各自的任务实例并且为各服务器节点配置相同的定时 时间,当达到所述定时时间时,在各服务器节点分别启动任务实例以发送签到请求,各任务 实例具有各自的任务类型和任务标识; 所述方法包括: 接收各服务器节点提交的任务实例的签到请求,按照预定规则对该任务实例进行签 到,并把签到成功的任务实例添加到任务执行列表使得相应服务器执行该任务实例; 轮询所述任务执行列表中各任务实例的执行状态,对执行完毕的任务实例进行签退并 从所述任务执行列表中移除该任务实例。

    2. 根据权利要求1所述的方法,其特征在于,所述预定规则包括: 当相同任务标识的其他任务实例已被添加到所述任务执行列表,则签到失败; 当相同任务类型的、达到预设界限值的其他任务实例的已被添加到所述任务执行列 表,则签到失败。

    3. 根据权利要求1所述的方法,其特征在于,在各服务器节点中,通过继承预设的并行 处理框架提供的基类并添加相应业务逻辑而生成所述任务实例。

    4. 根据权利要求2所述的方法,其特征在于,所述预设界限值为规定的允许执行所述相 同任务类型任务实例的服务器数量。

    5. 根据权利要求1所述的方法,其特征在于,所述任务标识具有预设的生存周期,当任 务标识的生存周期过期时,该任务标识对应的任务实例被签退。

    6. —种定时任务在多个服务器的并行执行装置,其特征在于, 其中,在各服务器节点分别生成各自的任务实例并且为各服务器节点配置相同的定时 时间,当达到所述定时时间时,在各服务器节点分别启动任务实例以发送签到请求,各任务 实例具有各自的任务类型和任务标识; 所述装置包括: 签到模块,用于接收各服务器节点提交的任务实例的签到请求,按照预定规则对该任 务实例进行签到,并把签到成功的任务实例添加到任务执行列表使得相应服务器执行该任 务实例; 签退模块,用于轮询所述任务执行列表中各任务实例的执行状态,对执行完毕的任务 实例进行签退并从所述任务执行列表中移除该任务实例。

    7. 根据权利要求6所述的装置,其特征在于,所述预定规则包括: 当相同任务标识的其他任务实例已被添加到所述任务执行列表,则签到失败; 当相同任务类型的、达到预设界限值的其他任务实例的己被添加到所述任务执行列 表,则签到失败。 _

    8. 根据权利要求6所述的装置,其特征在于,在各服务器节点中,通过继承预设的并行 处理框架提供的基类并添加相应业务逻辑而生成所述任务实例。

    9. 根据权利要求7所述的装置,其特征在于,所述预设界限值为规定的允许执行所述相 同任务类型任务实例的服务器数量。

    10. 根据权利要求6所述的装置,其特征在于,所述任务标识具有预设的生存周期,所述 签退模块还用于:当任务标识的生存周期过期时,对该任务标识对应的任务实例签退。

    展开全文
  • 我也不知道是什么原因,主要这个任务回去服务器上已从文件,两个同时跑就会出问题,第一个把文件移动了,另一个运行rename时就会报错。。。手动运行的时候不会有这个问题,我想应该就是quartz的问题,有大佬碰到过...

    这个是quartz-xml的配置 ,就是很一般的配置,我在这个job开头log了,每次跑的时候都是这个job跑了两个并行的。。我也不知道是什么原因,主要这个任务回去服务器上已从文件,两个同时跑就会出问题,第一个把文件移动了,另一个运行rename时就会报错。。。手动运行的时候不会有这个问题,我想应该就是quartz的问题,有大佬碰到过一样的问题吗??怎么样解决这个问题

    class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">

    syncTMSData

    false

    27 0/3 * * * ?

    class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

    INFO org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 2020-02-23 20:06:27,022 com.veta.first.job.ISyncData begin of sync Data from init folder……

    INFO org.springframework.scheduling.quartz.SchedulerFactoryBean#0_Worker-1 2020-02-23 20:06:27,044 com.veta.first.job.ISyncData begin of sync Data from init folder……

    2020-02-23 20:06:31错误信息:2: No such fileapi004传输失败fileName:194c28134-17e1-4698-98da-ab5c660b070b.xml

    2: No such file

    at com.jcraft.jsch.ChannelSftp.throwStatusError(ChannelSftp.java:2629)

    at com.jcraft.jsch.ChannelSftp.rename(ChannelSftp.java:1803)

    展开全文
  • 通常使用java实现定时任务时,有两种方法,种是spring中的schedule(cron = " */5 * * * ?"),另种就是java中的timer,timer+TimerTask配合实现,这里附上Timer对象的一些常用apiTimer() 创建-新计时器。Timer...

    通常在使用java实现定时任务时,有两种方法,一种是spring中的schedule(cron = " */5 * * * ?"),另一种就是java中的timer,

    timer+TimerTask配合实现,这里附上Timer对象的一些常用api

    Timer()                 创建-个新计时器。

    Timer(boolean isDaemon)        创建一个新计时器, 可以指定其相关的线程作为守护程序运行。

    Timer(String, name)           创建一个新计时器,其相关的线程具有指定的名称。

    Timer(String, name, boolean isDaemon) 创建一个新计时器, 可以指定其相关的线程作为守护程序运行。

    cancel() 终止此计时器,丢弃所有当前已安排的任务。.

    purge () 从此计时器的任务队列中移除所有己取消的任务。

    schedule(TimerTask, task, Date time)                 安排在指定的时间执行指定的任务。

    schedule (TimerTask task, Date firstTime, long period)     安排指定的任务在指定的时间开始进行重复的固定延迟执行。

    schedule (TimerTask task, long, delay)               安排在指定延迟后执行指定的任务。

    schedule (TimerTask task, 1ong. delay, long period)        安排指定的任务从指定的延迟后开始进行重复的固定延迟执行。

    scheduleAtFixedRate (TimerTask task,Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定速率执行。

    scheduleAtFixedRate (TimerTask task, long delay, long period) 安排指定的任务在指定的延迟后开始进行重复的固定速率执行。

    下面列举一个循环创建TimerTask的实例:

    public static void main(String[] args) throws ParseException {

    ArrayList list = new ArrayList<>(); //TimeClass是自己写的一个类,只有两个字段,private String startTime和private String endTime;     list.add(new TimeClass("2020-07-23 20:08:00 ","2020-07-23 20:08:15"));     list.add(new TimeClass("2020-07-23 20:08:30 ","2020-07-23 20:08:00"));     DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    //一个对象,在指定的开始时间和结束时间,分别进行不同的操作,如商品的定时上架、下架。

    Timer timer = new Timer();

    for(int i = 0; i < list.size(); i++){

    Date startTime = df.parse(list.get(i).getStartTime());

    Date endTime = df.parse(list.get(i).getEndTime());

    int a=i;

    timer.schedule(new TimerTask() { //新建一个定时任务

    @Override

    public void run() {

    System.out.println("任务开始了"+a);

    }

    },startTime);

    timer.schedule(new TimerTask() {

    @Override

    public void run() {

    System.out.println("任务结束了"+a); }

    },endTime);

    }

    //timer的过程中不会阻塞,不影响下面代码的执行

    for (int i=0;i<=20;i++) {

    System.out.println("=====" + i);

    }

    }

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持易采站长站。

    展开全文
  • SpringBoot中通过@Scheduled注解开启定时任务,通过控制执行顺序,单线程和多线程下同时执行多个定时任务所导致的并发问题。

    @Scheduled的执行顺序

    @Scheduled注解会在默认情况下以单线程的方式执行定时任务。
    这个“单线程”指两个方面:

    1. 如果一个定时任务执行时间大于其任务间隔时间,那么下一次将会等待上一次执行结束后再继续执行。
    2. 如果多个定时任务在同一时刻执行,任务会依次执行。

    那么这种效果肯定不是我们想要的,为了使@Scheduled效率更高,我们可以通过两种方法将定时任务变成多线程执行:

    1、在启动类中配置TaskScheduler线程池大小

    @Bean
    public TaskScheduler taskScheduler() {
    	ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
    	taskScheduler.setPoolSize(50);
    	return taskScheduler;
    }
    

    2、利用Spring提供的@Async注解和@EnableAsync注解

    @Component
    @EnableAsync
    public class TimedTask{
        @Async
        @Scheduled(cron = "0 0/1 * * * ?")//每一分钟执行一次
        public void taskA() {
            //执行你的业务逻辑
        }
        
        @Async
        @Scheduled(cron = "0 0/1 * * * ?")//每一分钟执行一次
        public void taskB() {
            //执行你的业务逻辑
        }
    

    通过以上方式,定时任务将会以多线程的方式开始执行,减小了程序耦合度,提升运行效率。

    @Scheduled同步

    定时任务在同一时刻开始执行有两种情况:

    • 多个任务的间隔时间相同,如都是1分钟执行一次,那么每一分钟,这些任务都会一起执行。
    • 多个任务的间隔时间不同,但有重合的时刻。如一个任务每天零点执行,另一个任务每一分钟执行,那么这两个任务在零点的时刻会一起执行。

    由于任务都是异步的,如果多个任务同时操作同一资源,那么必然会导致错误。
    这个时候可以给任务加锁,保证任务互不干扰,拥有在同一时刻执行的线程安全:

    @Component
    @EnableAsync
    public class TimedTask{
    
    	private Object lock = new Object();
    	
        @Async
        @Scheduled(cron = "0 0 0 * * ?")//每天零点执行
        public void taskA() {
        	synchronized(lock){
           		//执行你的业务逻辑
    		}
        }
        
        @Async
        @Scheduled(cron = "0 0/1 * * * ?")//每一分钟执行一次
        public void taskB() {
        	synchronized(lock){
           		//执行你的业务逻辑
    		}
        }
    

    控制定时任务的执行顺序

    如果对执行顺序有要求的定时任务,有如下两种情况:
    1、在某一时刻同时执行
    如任务A在零点初始化数据,任务B每分钟更新数据。那么在零点,必须是任务A先执行,其次才是B。但加锁只能保证线程安全,不能保证执行顺序。在这种情况下,我们可以借助redis设置获取锁的顺序,亦或标志字进行执行顺序的判断。
    2、总是同时执行
    在任务间隔相同的情况下,一般为业务的解耦,不应操作共享资源,应当放至同一个定时任务中执行。

    创作不易,留下你的小赞,暖我一整天~

    展开全文
  • 如果该定时任务服务部署多个实例,如何确保只在一个服务实例里执行任务呢? 个人总结了下,可以有以下解决思路。 使用分布式锁 借助分布式锁,确保多个实例里的task只有竞争到锁的实例任务才执行。比如,redis的...
  • 定时关机是有招的:1、不用编程,先建一个批处理文件1。BAT,文件内容:shutdown -s2、控制面板中,添加任务计划,将1。BAT作为需要执行的文件即可。3、如果编程的话,有WINDOWS的API可以用ExitWindowsEx()。定时...
  • Scheduled开启多线程,同时执行多个定时任务.
  • Springboot执行多个定时任务并动态获取定时任务信息 第步,入口类中声明定时任务 import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; ...
  • 当我们有多个服务器,每个服务器上都有相同的定时任务代码时,比如每天凌晨定时插入数据。 如果多个服务器上的定时任务都执行了会导致数据的重复; 如果只让一个服务器有定时代码,部署麻烦,需要多套代码,万一该...
  • 承接上篇文章(Spring3.0定时任务的基本操作 简单示例):二、spring定时任务多个任务和执行时间间隔配置1、多个任务的使用:第步:写好执行定时任务的类和方法(多个,参考上篇文章)test0 0 23 * * ?...
  • 配置了7个按照运行结束时间每5s一次的定时任务时,发现了一个问题,就是有的定时任务没有按时执行,但是却又不是每一次都不执行,也不是每一次都是同一个线程不执行,很奇怪,去看了一下是怎么回事 项目中配置的...
  • @Scheduled注解的定时任务是单线程的,同一时间段内只能执行一个定时任务,其它定时任务不执行。 为解决同一时间无法执行任务,可以通过配置类,同时启动类添加注解@EnableScheduling。 @Configuration ...
  • 乱写了一点代码, 原型是微服务分布式部署中,某个定时任务只需要某个...1. 自定义Annotation注解,标识了该注解的定时任务既只能由某一个节点执行 2. AOP识别标识了自定义注解的定时任务,完成执行方法前的加锁和...
  • 今天来说一个java机部署下定时任务的处理方案。需求: 有两台服务器同时部署了同一套代码, 代码中写有spring自带的定时任务,但是每次执行定时任务时只需要一台机器去执行。当拿到这个需求时我脑子中立马出现了两...
  • Linux定时任务-day23

    2021-05-16 17:37:21
    1.定时任务基本概述1.什么是crondcrond就是计划任务,类似于我们平时生活中的闹钟。定点执行。2.为什么要使用crondcrond主要是做一些周期性的任务,比如: 凌晨3点定时备份数据。比如:11点开启网站抢购接口,12点...
  • 问题描述程序发版之后一个定时任务突然挂了!“幸亏是用灰度跑的,不然完蛋了。????”之前因为线程池踩过坑,阅读过ThreadPoolExecutor的源码,自以为不会再踩坑,没想到又不小心踩坑了,只不过这次的坑踩了...
  • //下面是一个简单事例:declarejobno number;begindbms_job.submit(jobno,'P_SBZS_GENZNJQC;',sysdate,'trunc(sysdate)+1');--每天零晨commit;end;/DBMS_JOB.SUBMIT(:jobno,//job号'your_procedure;...
  • 所以多个定时在没设置线程池的时候,其实是单线程执行的, 解决多个任务可以同时进行,启动类里加上下面代码即可。 @Configuration public class ScheduledConfig { @Bean public TaskScheduler tas
  • 如何用Python写一个每天的定时程序a.小编们先获取当前的时间 now=datetime.datetime.now() 假设当前时间是2017-02-09 20:19:47.555000 b.然后小编们输入一个你要定时执行的target时间 比如你是x分10秒的时候执行...
  • 定时任务使用线程注意事项

    千次阅读 2021-03-22 18:08:17
    定时任务是否允许上一个定时任务未结束,下一个定时任务可以启动,通过Scheduled中的配置决定。2. 主线程已经关闭,线程池中的线程还在运行问题。线程池的关闭方法问题3. 定时任务有大量数据,导致服务无法停止...
  • 一个定时任务单线程执行(保证一个定时任务A执行完成前,A的下次执行不会开始) 需求实现: 方案 ,针对@Scheduled的定时任务,增加配置文件,可实现不同@Scheduled定时任务线程运行,代码如下 ...
  • Android中(Service )服务的最佳实践——后台执行的定时任务版权声明:本文为博主原创文章,未经博主允许不得转载。https://blog.csdn.net/u010046908/article/details/47727367Androi...文章请叫我东子2015-08-...
  • .NET Core 项目启动时运行定时任务
  • 1: 因为定时任务不是核心功能,所以可能会需要经常发布 ,介于...都会依赖一个tomcat,运维上带来麻烦2:放到tomcat比较吃内存,加上tomcat的一些不需要的依赖,会变得臃肿.3:定时任务既然独立开了一个模块去跑单独的...
  • 一开始打印日志发现有多个线程在运行,但是把线程池数量设为1之后还会执行两遍,最后发现是Tomcat服务配置文件映射问题,配置文件为“**/tomcat/conf/server.xml”。为了启动后可以访问服务器上的图片,外部建了...
  • 定时任务一直执行失败,也看了很大佬,自己cmd上执行也报错 起初想了哈可能时没有配置虚拟环境,于是搞了虚拟环境,但是还是不行 如下图venv位虚拟环境 后面请教后端大佬刘老师 大佬果然是大佬 眼就看出我的...
  • 1. 总结常见的实现定时任务的几种方法thread实现 【原理:通过创建一个线程,让他while循环里面一直运行,用sleep() 方法让其休眠从而达到定时任务的效果。】Timer类ScheduledExcecutorService类使用spring的 ...
  • 自动定时任务不要整点运行

    千次阅读 2021-02-03 13:45:41
    3、如果正好多个系统整点自动运行一个时间点,可能会导致系统资源不足的情况。 自动定时任务多数是批量业务,需要耗费服务器资源较多。 4、如果A系统设置了半夜2点整自动重启服务,而B系统也设置了同一时间...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 159,906
精华内容 63,962
关键字:

多个定时任务只有一个在运行