精华内容
下载资源
问答
  • springboot定时任务配置
    2021-04-21 15:54:24

    springboot定时任务配置
    配置地址

    更多相关内容
  • 1、实现SchedulingConfigurer接口 ...开启定时任务 public class TimingTasks implements SchedulingConfigurer { //配置多线程 @Override public void configureTasks(ScheduledTaskRegistrar taskRe

    1、实现SchedulingConfigurer接口
    2、重写configureTasks方法

    @Configuration      //1.标记配置类
    @EnableScheduling   // 2.开启定时任务
    public class TimingTasks  implements SchedulingConfigurer {
        //配置多线程
        @Override
        public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
            taskRegistrar.setScheduler(Executors.newScheduledThreadPool(5));
        }
    }
    
    展开全文
  • springboot定时任务配置详解 cron表达式详解 cron表达式是一个字符串,由6或7个表达式组成,每个表达式中间有个空格,每个表达式代表一个含义,cron有如下两种语法格式: Seconds(秒) Minutes(分) Hours(时) ...

    springboot定时任务配置详解

    cron表达式详解

    cron表达式是一个字符串,由6或7个表达式组成,每个表达式中间有个空格,每个表达式代表一个含义,cron有如下两种语法格式:

    • Seconds(秒) Minutes(分) Hours(时) DayofMonth(月份中的日期) Month(月) DayofWeek(星期中的日期) Year(年)
    • Seconds(秒) Minutes(分) Hours(时) DayofMonth(月份中的日期) Month(月) DayofWeek(星期中的日期)
    位置顺序表达式名称允许值允许的特殊字符
    1Seconds(秒)0-59的整数, - * /
    2Minutes(分)0-59的整数, - * /
    3Hours(时)0-23的整数, - * /
    4DayofMonth(月份中的日期)1-31的整数, - * / ? L W C
    5Month(月)1-12的整数或JAN-DEc, - * /
    6DayofWeek(星期中的日期)1-7的整数(1表示星期天,2表示星期一), - * / ? L C #
    7Year(年)(可选)1970-2099年, - * /

    每个表达式都可以使用数字,也可以使用特殊字符代替,特殊字符含义如下:

    • 星号(*):可用在所有字段中, 表示对应时间表达式的每一个时刻, 例如, 在秒字段时, 表示“每秒”;
    • 问号(?):只能用在DayofMonth和DayofWeek两个表达式。因为DayofMonth和DayofWeek这两个元素是互斥的,因此应该通过设置一个问号(?)来表明不想设置的那个字段。
      例如想在每月的10日触发任务调度,不管10日到底是星期几,则只能使用如下写法: 0 0 0 10 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,
      与在每月10号触发矛盾了。
    • 减号(-):表达一个范围,例如在Hours表达式使用8-12,表示从8点到12点每小时触发一次任务
    • 逗号(,):表达一个列表值, 如在星期字段中使用“2,3,6”, 则表示星期一, 星期三和星期五;
    • 斜杠(/):x/y 表达一个等步长序列, x 为起始值, y 为增量步长值。 如在秒字段中使用 0/15, 则表示为 0,15,30 和 45 秒,都要执行调度任务。
      而5/15 在分钟字段使用则表示在5,20,35,50分钟的时候都要执行调度任务。你也可以使用/y, 它等同于 0/y;
    • L(字母):表示最后,只能出现在DayofWeek和DayofMonth表达式,如果在DayofWeek表达式使用2L,表示在最后的一个星期一触发调度任务;
    • W(字母):表示有效工作日(周一到周五),只能出现在DayofMonth表达式,系统将在离指定日期的最近的有效工作日触发事件。例如:在 DayofMonth使用10W,如果10号是星期六,则将在最近的工作日:星期五,即14号触发。
      如果15号是星期天,则在16号(周一)触发;如果15号在星期一到星期五中的一天,则就在15号当天触发。但必须注意匹配日期不能够跨月, 如你指定1W, 如果1号是星期六, 正确匹配的是 3 号星期一,
      而不是上个月最后的那天(星期五)。 W 字符串只能指定单一日期, 而不能指定日期范围;
    • LW(字母):在DayofMonth表达式可以组合使用 LW, 它的意思是当月的最后一个工作日
    • #(字母):用于确定每个月第几个星期几,只能出现在DayofMonth表达式。例如在2#3,表示某月的第三个星期一。
    • C(字母): 该字符只在DayofWeek和DayofMonth表达式中使用, 代表“Calendar”的意思。 它的意思是计划所关联的日期,如果日期没有被关联, 则相当于日历中所有日期。
      例如 5C 在DayofMonth字段中就相当于日历 5 日以后的第一天。1C 在DayofWeek字段中相当于星期日后的第一天。
      ::: tip 提示
      Cron 表达式对特殊字符的大小写不敏感, 对代表星期的缩写英文大小写也不敏感。
      :::

    示例:

    • @Scheduled(cron=“0/5 * * * * ?”) // 每隔5秒钟执行一次任务
    • @Scheduled(cron=“0 0/1 * * * ?”) // 每隔1分钟执行一次任务
    • @Scheduled(cron=“0 0 12 * * ?”) // 每天中午12点行一次任务
    • @Scheduled(cron=“0 25 10 ? * *”) // 每天上午10:25行一次任务
    • @Scheduled(cron=“0 25 10 * * ?”) // 每天上午10:25行一次任务
    • @Scheduled(cron=“0 25 10 * * ? *”) // 每天上午10:25行一次任务
    • @Scheduled(cron=“0 15 10 * * ? 2005”) // 2005年的每天上午10:15行一次任务
    • @Scheduled(cron=“0 * 18 * * ?”) // 在每天下午6点到下午6:59期间的每1分钟行一次任务
    • @Scheduled(cron=“0 0/5 18 * * ?”) // 在每天下午6点到下午6:55期间的每5分钟行一次任务
    • @Scheduled(cron=“0 0/5 14,18 * * ?”) // 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟
    • @Scheduled(cron=“0 0-5 18 * * ?”) // 在每天下午6点到下午6:05期间的每1分钟行一次任务
    • @Scheduled(cron=“0 0 8,10,12 * * ?”) // 每天上午8点,10点,12点行一次任务
    • @Scheduled(cron=“0 0/30 9-17 * * ?”) // 朝九晚五工作时间内每半小时行一次任务
    • @Scheduled(cron=“0 0 12 ? * 2”) // 表示每个星期一中午12点行一次任务
    • @Scheduled(cron=“0 10,50 14 ? 2 3”) // 每年二月的星期二的下午2:10和2:50行一次任务
    • @Scheduled(cron=“0 20 10 ? * 2-6”) // 周一至周五的上午10:20行一次任务
    • @Scheduled(cron=“0 35 10 20 * ?”) // 每月20日上午10:35行一次任务
    • @Scheduled(cron=“0 35 10 L * ?”) // 每月最后一日的上午10:35行一次任务
    • @Scheduled(cron=“0 35 10 ? * 6L”) // 每月的最后一个星期五上午10:35行一次任务
    • @Scheduled(cron=“0 35 10 ? * 6L 2020-2025”) // 2020年至2025年的每月的最后一个星期五上午10:35
    • @Scheduled(cron=“0 35 10 ? * 6#2”) // 每月的第二个星期五上午10:35行一次任务

    线程池配置详解

    @Configuration
    public class TaskConfig3 {
        //核心线程数,默认是1,为1的时候就是单线程
        private int corePoolSize = 5;
        //最大线程数,核心线程不够用的时候会创建新的线程,最大不超过maxPoolSize
        private int maxPoolSize = 20;
        //队列最大长度(容量)
        private int queueCapacity = 5;
        //非核心线程闲置时的超时时长,单位时秒
        private int keepAliveTime = 60;
    
        @Bean
        public Executor taskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            //设置核心线程数
            executor.setCorePoolSize(corePoolSize);
            //设置最大线程数
            executor.setMaxPoolSize(maxPoolSize);
            //设置队列最大长度(容量)
            executor.setQueueCapacity(queueCapacity);
            //设置闲置时的超时时长
            executor.setKeepAliveSeconds(keepAliveTime);
            //允许核心线程超时,默认时false,当设置为true后,核心线程超时也会销毁
            executor.setAllowCoreThreadTimeOut(true);
            // 线程池对拒绝任务(无线程可用)的处理策略,目前有4种方式,分别如下
            // AbortPolicy 丢弃任务,抛运行时异常,CallerRunsPolicy 执行任务
            // DiscardPolicy 忽视,什么都不会发生,DiscardOldestPolicy 从队列中踢出最先进入队列(最后一个执行)的任务
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            //等待所有线程执行完关闭线程池,默认为false
            executor.setWaitForTasksToCompleteOnShutdown(true);
            //设置等待关闭线程池的时间,因为不能无限的等待下去
            executor.setAwaitTerminationSeconds(60);
            //设置线程名字的前缀
            executor.setThreadNamePrefix("test-task-");
            executor.initialize();
            return executor;
        }
    }
    
    1. corePoolSize:核心线程数。
    • 核心线程会一直存活,及时没有任务需要执行
    • 当线程数小于核心线程数时,即使有线程空闲,线程池也会优先创建新线程处理
    • 设置allowCoreThreadTimeout=true(默认false)时,核心线程会超时关闭
    1. maxPoolSize:最大线程数。
    • 当线程数>=corePoolSize,且任务队列已满时。线程池会创建新线程来处理任务
    • 当线程数=maxPoolSize,且任务队列已满时,线程池会拒绝处理任务而抛出异常或根据 RejectedExecutionHandler 来进行拒绝策略处理。
    1. queueCapacity:任务队列容量(阻塞队列)
      +当核心线程数达到最大时,新任务会放在队列中排队等待执行
    2. keepAliveTime:线程空闲时间
    • 当线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize
    • 如果allowCoreThreadTimeout=true,则会直到线程数量=0
    1. allowCoreThreadTimeout:允许核心线程超时
    2. rejectedExecutionHandler:任务拒绝处理器
    • 两种情况会拒绝处理任务:
      • 当线程数已经达到maxPoolSize,切队列已满,会拒绝新任务
      • 当线程池被调用shutdown()后,会等待线程池里的任务执行完毕,再shutdown。如果在调用shutdown()和线程池真正shutdown之间提交任务,会拒绝新任务
    • 线程池会调用rejectedExecutionHandler来处理这个任务。如果没有设置默认是AbortPolicy,会抛出异常
    • ThreadPoolExecutor类有几个内部实现类来处理这类情况:
      • AbortPolicy 丢弃任务,抛运行时异常
      • CallerRunsPolicy 执行任务
      • DiscardPolicy 忽视,什么都不会发生
      • DiscardOldestPolicy 从队列中踢出最先进入队列(最后一个执行)的任务
    • 实现RejectedExecutionHandler接口,可自定义处理器

    默认值

    • corePoolSize=1
    • queueCapacity=Integer.MAX_VALUE
    • maxPoolSize=Integer.MAX_VALUE
    • keepAliveTime=60s
    • allowCoreThreadTimeout=false
    • rejectedExecutionHandler=AbortPolicy()

    1介绍
    2springboot定时任务
    3springboot定时任务配置详解
    4springboot动态定时任务
    5springboot集成websocket
    6springboot多数据源
    7springboot配置druid监听
    8springboot自定义注解
    9springboot常见注解详解
    10springboot接收参数详解
    11springboot验证机制@Valid和@Validated
    12springboot集成Swagger2
    13springboot集成swagger-bootstrap-ui
    14springboot集成shiro
    15springboot集成shiro(二)
    16springboot集成jwt
    17springboot集成ActiveMQ
    18springboot缓存机制

    🍉🍉🍉 欢迎大家来博客了解更多内容:java乐园 🍉🍉🍉

    展开全文
  • Springboot中使用数据库配置定时任务,并在Job中自动装配Spring容器Bean。
  • spring-cloud-alibaba+dubbo+nacos+quartz以yml配置方式实现
  • 1. SpringBoot 自定义线程池以及多线程间的异步调用(@Async、@EnableAsync) 2.Java多线程之定时任务 以及 SpringBoot多线程实现定时任务 3.@EnableScheduling 与 @Scheduled
  • 使用springboot 构建的 spring task 定时任务,采用异步任务形式,防止任务堵塞.
  • 首先定义的是异步线程池,需要再启动类添加注解 @EnableScheduling ...import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.scheduling.annotation.EnableA

    首先定义的是异步线程池,需要再启动类添加注解

    @EnableScheduling
    @EnableAsync

    package com.git.demo;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.scheduling.annotation.EnableAsync;
    import org.springframework.scheduling.annotation.EnableScheduling;
    
    @SpringBootApplication
    @EnableScheduling
    @EnableAsync
    public class GitDemoApplication{
    
        public static void main(String[] args) {
            SpringApplication.run(GitDemoApplication.class, args);
        }
    
    }

    定义异步任务类

    package com.git.demo.task;
    
    import org.springframework.scheduling.annotation.Async;
    import org.springframework.scheduling.annotation.Scheduled;
    import org.springframework.stereotype.Component;
    
    @Component
    public class ScheduledTask {
    
        @Scheduled(cron = "0/1 * * * * ?")
        @Async
        public void scheduledTask1() throws Exception{
            int a=1/0;
            System.out.println(Thread.currentThread().getName()+"---scheduledTask1---"+System.currentTimeMillis());
            Thread.sleep(4000);
        }
        @Scheduled(cron = "0/1 * * * * ?")
        @Async("asyncTaskExecutor")
        public void scheduledTask2(){
            System.out.println(Thread.currentThread().getName()+"---scheduledTask2---"+System.currentTimeMillis());
        }
    }
    

    局部线程池

    package com.git.demo.config;
    
    import org.springframework.context.annotation.Bean;
    import org.springframework.core.task.AsyncTaskExecutor;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    import org.springframework.stereotype.Component;
    
    import java.util.concurrent.ThreadPoolExecutor;
    
    /**
     * 自定义局部线程池 使用时需要指定名称为asyncTaskExecutor
     */
    @Component
    public class AsyncTaskExecutorConfig {
    
        @Bean("asyncTaskExecutor")
        public AsyncTaskExecutor getAsyncTaskExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            //自定义线程池前缀
            executor.setThreadNamePrefix("defineAsyncTask-");
            //核心线程数
            executor.setCorePoolSize(2);
            //最大线程数
            executor.setMaxPoolSize(5);
            //队列大小
            executor.setQueueCapacity(50);
            //淘汰策略:CallerRunsPolicy:当线程池没有能力处理时直接在执行方法的调用线程中运行被拒绝的任务
            //          AbortPolicy:处理程序遭到拒绝时将抛出 RejectedExecutionException
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            //等待所有任务调度完成在关闭线程池,保证所有的任务被正确处理
            executor.setWaitForTasksToCompleteOnShutdown(true);
            //线程池关闭时等待其他任务的时间,不能无限等待,确保应用最后能被关闭。而不是无限期阻塞
            executor.setAwaitTerminationSeconds(60);
            //初始化线程池
            executor.initialize();
            return executor;
        }
    }
    

    全量线程池

    package com.git.demo.config;
    
    import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.scheduling.annotation.AsyncConfigurerSupport;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    import org.springframework.stereotype.Component;
    
    import java.util.concurrent.Executor;
    import java.util.concurrent.ThreadPoolExecutor;
    
    /**
     * 定义全局线程池
     */
    @Component
    public class AsyncGlobalConfig extends AsyncConfigurerSupport {
    
        @Value("${define.global.async.prefix}")
        private String threadName;
        @Override
        public Executor getAsyncExecutor() {
            ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
            executor.setThreadNamePrefix(threadName);
            executor.setCorePoolSize(2);
            executor.setMaxPoolSize(10);
            executor.setQueueCapacity(100);
            executor.setKeepAliveSeconds(20);
            executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
            executor.setWaitForTasksToCompleteOnShutdown(true);
            executor.setAwaitTerminationSeconds(60);
            executor.initialize();
            return executor;
        }
    
        /**
         * 重写线程异常处理方法
         * @return
         */
        @Override
        public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
            return new CustomAsyncExceptionHandler();
        }
    }
    

    线程异常处理类

    package com.git.demo.config;
    
    import org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler;
    
    import java.lang.reflect.Method;
    
    /**
     * 处理线程异常
     */
    public class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {
        @Override
        public void handleUncaughtException(Throwable throwable, Method method, Object... objects) {
            System.out.println("线程异常了");
        }
    
    }
    

     

    展开全文
  • springboot动态配置定时任务(schedule),可不重启项目实现开关重启任务,改变任务定时规则
  • 关于springboot定时任务配置线程池之后任务重复执行问题,踩坑 最近遇到一个问题。项目中有一个job 的定时任务mytask。里面有七个定时任务。有3秒执行一次的,有五秒的,有十秒的,有两三分钟的,也有个把小时的。...
  • SpringBoot实现定时任务的动态开启关闭,如有疑问联系wx: hsj179540
  • 生活中经常要用定时任务,比如: (1)比如生活中的闹钟,我们设置闹钟每天早上七点执行响铃操作。我们给这个闹钟设定了时间,并且也给它设置了要进行执行的具体任务。 (2)假如在一个电商项目中,当用户在选择商品加入...
  • SpringBoot定时任务配置

    2018-11-26 19:08:10
    这时候就要用到定时任务SpringBoot中,创建定时任务比较简单,具体步骤如下: 1、开启定时任务: 在程序的入口类中添加@EnableScheduling注解 package com.bonc.energymanagement; import org.mybatis.spring....
  • springboot 定时任务(线程配置,并行【同步】、异步等)
  • SpringBoot定时任务详解

    2021-04-29 19:54:43
    SpringBoot定时任务详解 记录 使用springboot创建定时任务非常简单,目前主要有以下三种方式创建: 一、基于注解(@Scheduled) 二、基于接口(SchedulingConfigurer) 三、基于注解设定多线程定时任务 一、静态:...
  • SpringBoot项目中配置定时任务
  • 1、开启定时任务 开启定时任务比较简单,在入口出打开 @EnableScheduling 2、任务代码实现 其中 cron ="${thread.check.interval} 是配置在application.yml中: 项目运行后可看到控制台每秒打印...
  • 开启定时任务 @Slf4j public class TimingTask { //3.添加定时任务 @Scheduled(cron = "0/5 * * * * ?") //或直接指定时间间隔,例如:5秒 //@Scheduled(fixedRate=5000) private void couponTimingTa
  • 首先经过了解,@Scheduled是单线程的,如果有多个定时任务,势必需要前一个任务执行完才会执行后面的任务,先放代码: package com.wl.standard.task; import com.wl.standard.entity.City; import ...
  • SpringBoot配置定时任务

    2021-01-26 10:46:17
    2.编写定时器类编写定时任务 定时器表达式有多重种 initialDelay:表示项目启动多久后执行定时器; fixedRate:固定频率执行定时器,并行执行,例如任务A执行2分钟,不管是否A任务是否执行完成,B任务都开始...
  • springBoot 项目中,要使用定时任务变得十分容易,我们只需使用@EnableScheduling 开启定时任务支持,再配合 @Scheduled(cron = "cron表达式"),即可简单的集成定时任务功能,简单方便的同时,此种方式却也存在着...
  • 主要为大家详细介绍了基于Springboot执行多个定时任务并动态获取定时任务信息,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • Springboot定时任务配置及遇到的问题

    千次阅读 2018-09-03 13:59:01
    SpringBoot定时任务配置及遇到的问题 在springboot中遇到的问题笔记 目录 SpringBoot定时任务配置及遇到的问题 目录 注解配置 创建定时任务执行类,配置定时任务注解@Scheduled 讲讲cron表达式 注意事项 ...
  • SpringBoot定时任务使用配置文件配置执行时间 在传统的Spring项目中使用Spring Task设置定时任务,其执行时间配置到applicationContext.xml中指定执行方法即可;但是由于现在换做了SpringBoot框架,虽然Spring ...
  • 主要介绍了springboot schedule 解决定时任务不执行的问题,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
  • springboot配置定时任务功能
  • 鉴于之前太过懒惰,没有自行去认真研究过开源的定时任务框架,遂特此记录一下基于SpringBoot项目的简单定时(间隔)任务。 首先创建一个定时(间隔)任务的配置文件,用于定义每个任务的间隔时间。我这里取名就叫...
  • 1. 定义scheduled配置类, 实现SchedulingConfigurer接口 package com.metarnet.kpi.scheduled; import cn.hutool.core.util.ClassLoaderUtil; import com.metarnet.kpi.dictionary.domian.SysDict; import ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 22,402
精华内容 8,960
关键字:

springboot定时任务配置

spring 订阅