介绍
这篇文章将为大家详细讲解有关Springboot实现集成定时器和多线程异步处理,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
<强> Springboot集成多线程异步,直接上配置:强>
/* * *线程池异步配置 */@ configuration @EnableAsync 公开课ThreadExecutorConfig 实现AsyncConfigurer { @Override 公共执行人getAsyncExecutor () { ThreadPoolTaskExecutor执行人=new ThreadPoolTaskExecutor ();//设置核心线程数 executor.setCorePoolSize (5);//设置最大线程数 executor.setMaxPoolSize (7);//设置队列容量 executor.setQueueCapacity (20);//设置线程活跃时间(秒) executor.setKeepAliveSeconds (60);//设置默认线程名称 executor.setThreadNamePrefix(“帕斯卡产生绯闻);//设置拒绝策略 遗嘱执行人。setRejectedExecutionHandler(新ThreadPoolExecutor.CallerRunsPolicy ());//等待所有任务结束后再关闭线程池 executor.setWaitForTasksToCompleteOnShutdown(真正的); executor.initialize (); 返回执行人; } @Override 公共AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler () { 返回新MyAsyncUncaughtExceptionHandler (); } }
下面的是对多线程异步的时候报出的异常处理方法,可以自定义一个处理多线程异常类来实现自身的业务逻辑。
进口org.springframework.aop.interceptor.AsyncUncaughtExceptionHandler; 进口java.lang.reflect.Method; 公共类MyAsyncUncaughtExceptionHandler实现 AsyncUncaughtExceptionHandler { @Override 公共空间handleUncaughtException (Throwable的前女友, 方法方法,对象……params) {//处理异常 } }
启动类上要记得添加异步和开启定时器的标签
@SpringBootApplication @EnableScheduling @Async 公开课MultithreadingApplication { 公共静态void main (String [] args) { SpringApplication.run (MultithreadingApplication.class, args); } }
业务逻辑方法:
@Async @Scheduled (initialDelay=1000, fixedDelay=5000) 公共空白测试(){ SimpleDateFormat格式=new SimpleDateFormat (“HH: mm: ss"); 尝试{ logger.info(“当前线程为:“+ Thread.currentThread () . getname() +“,方法开始时间为:“+ format.format(新日期())); thread . sleep (10000); logger.info(“当前线程为:“+ Thread.currentThread () . getname() +“,方法结束时间为:“+ format.format(新日期())); }捕捉(InterruptedException e) { e.printStackTrace (); } }
<>强对于@Schedule注解的使用方法:强>
<强>点进去可以看到有几个可选参数:强>
fixedDelay:控制方法执行的间隔时间,是以上一次方法执行完开始算起,如上一次方法执行阻塞住了,那么直到上一次执行完,并间隔给定的时间后,执行下一次
fixedRate:是按照一定的速率执行,是从上一次方法执行开始的时间算起,如果上一次方法阻塞住了,下一次也是不会执行,但是在阻塞这段时间内累计应该执行的次数,当不再阻塞时,一下子把这些全部执行掉,而后再按照固定速率继续执行。
initialDelay:如:@Scheduled (initialDelay=10000, fixedRate=15000
这个定时器就是在上一个的基础上加了一个initialDelay=10000意思就是在容器启动后,延迟10秒后再执行一次定时器,以后每15秒再执行一次该定时器。
cron表达式可以定制化执行任务,但是执行的方式是与fixedDelay相近的,也是会按照上一次方法结束时间开始算起。
这里可以根据自身的业务需求,看到底选择哪一个更适合,这里cron表达式就不再多言,可以结合自身应用场景来定
这样,需求就实现了
测试结果:
32360 11:12:40.436信息20-07-07 - - - - - -[主要]o.s.b.w.embedded.tomcat。TomcatWebServer: Tomcat开始>/* * *配置多个时间表的线程配置 */@ configuration @EnableScheduling 公共类ScheduleConfig实现SchedulingConfigurer {/* *并行任务 */公共空间configureTasks (ScheduledTaskRegistrar taskRegistrar) { ThreadPoolTaskScheduler taskScheduler=new ThreadPoolTaskScheduler (); taskScheduler.setThreadNamePrefix(“时间表任务产生绯闻,); taskScheduler.setPoolSize (5); taskScheduler.setAwaitTerminationSeconds (60); taskScheduler.setWaitForTasksToCompleteOnShutdown(真正的); taskScheduler.initialize (); taskRegistrar.setTaskScheduler (taskScheduler); } }Springboot实现集成定时器和多线程异步处理