SpringBoot之定时任务和多线程编程

定时任务

1-1:使用@EnableScheduling注解默认配置的问题

定时任务一般是项目中都需要用到的,可以用于定时处理一些特殊的任务。
在spirngboot中使用定时任务变的特别简单,只需要在启动类上增加一个@EnableScheduling注解即可。默认情况下,如果什么都不进行配置,就会导致一个问题,系统中所有的定时任务都是使用的一个线程去执行的,也就是说,如果如果同一个时刻有2个定时任务需要执行,那么只可能有一个定时任务在执行,如果要解决这个问题可以定义一个自定的任务调度线程池即可。

1-2:SpringBoot中@EnableScheduling注解说明
在这里插入图片描述

上面这个图是从 org.springframework.scheduling.annotation.EnableScheduling 这个注解类上的解释上截出来的。大致上就是我们定义一个 TaskScheduler 类型的bean即可解决这个问题.定义一个ThreadPoolTaskScheduler实例

1-3:增加TaskScheduler的Bean定义,在需要进行定时的任务上加上注解**@Scheduled**,在使用@Scheduled注解时,请搜索cron表达式的使用

    /**
     * @see EnableScheduling
     * @see TaskScheduler
     **/
    @Bean
    public TaskScheduler taskScheduler() {
        ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
        taskScheduler.setPoolSize(4);
        taskScheduler.setThreadNamePrefix("spring-schedule-thread-pool-");
        return taskScheduler;
    }

2:多线程编程

1-1:如何进行多线程异步编程:

Spring 通过任务执行器( TaskExecutor )来实现多线程和并发编程。使用ThreadPoolTaskExecutor 可实现一个基于线程泊的TaskExecutor。而实际开发中任务一般是非阻碍的,即异步的,所以我们要在配置类中通过@EnableAsync 开启对异步任务的支持,并通过在实际执行的Bean 的方法中使用@Async 注解来声明其是一个异步任务.

1-2:如何配置多线程类

     //需要在异步配置类上加上注解@EnableAsync;需要异步的方法加上注解@Async
    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
        taskExecutor.setQueueCapacity(100);
        taskExecutor.setCorePoolSize(8);
        taskExecutor.setMaxPoolSize(8);
        taskExecutor.setThreadNamePrefix("spring-thread-pool-");
        taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
        return taskExecutor;
    }

猜你喜欢

转载自blog.csdn.net/A169388842/article/details/82883543
今日推荐