SpringBoot的@EnableAsync和@Async注解分析

 更新时间:2023年07月18日 09:57:08   作者:七月J  
这篇文章主要介绍了SpringBoot的@EnableAsync和@Async注解分析,Spring Boot是一个快速开发框架,可以帮助开发人员快速构建基于Spring的应用程序,需要的朋友可以参考下

前言

使用多线程,往往是创建Thread,或者是实现Runnable接口,用到线程池得时候需要创建Executors,通过使用@EnableAsync注解就可以使用多线程,@Async注解加在线程任务的方法上 可以异步执行任务。使用 ThreadPoolTaskExecutor 就可以使用线程池。

定义配置类

这个配置类需要实现AsyncConfigurer接口,并实现他的方法

  • 异步线程的提供者,在里面配置自动执行的东西,如线程池参数。
  • 线程异常的处理。
@Configuration
@EnableAsync
public class ThreadPoolConfig implements AsyncConfigurer {
    private static final Logger log = LoggerFactory.getLogger(ThreadPoolConfig.class);
    @Autowired
    private ThreadPoolParamsConfig threadPoolParamsConfig;
    @Override
    @Bean("taskExecutor")
    public Executor getAsyncExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(threadPoolParamsConfig.getCorePoolSize());
        executor.setMaxPoolSize(threadPoolParamsConfig.getMaxPoolSize());
        executor.setQueueCapacity(threadPoolParamsConfig.getQueueCapacity());
        executor.setKeepAliveSeconds(threadPoolParamsConfig.getKeepAliveSeconds());
        executor.setThreadNamePrefix("authority-manage-thread-");
        executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
        executor.initialize();
        return executor;
    }
    @Override
    public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
        return (ex,method,params) -> {
          log.error("异常信息:{}",ex.getMessage());
          log.error("exception method:{}",method.getName());
        };
    }
}

线程池配置类

@Data
@Component
@ConfigurationProperties(prefix = "task.pool")
public class ThreadPoolParamsConfig {
    /**
     * 核心线程数
     */
    private int corePoolSize;
    /**
     * 最大线程数
     */
    private int maxPoolSize;
    /**
     * 线程空闲空间
     */
    private int keepAliveSeconds;
    /**
     * 任务队列容量
     */
    private int queueCapacity;
}

调用异步线程任务

/**
 * 测试异步创建任务
 * @return
 */
public Result createIsueTask() {
    inspPlanRlnToolService.asynsBatchCreateIsueTasks();
    return Result.ok();
}

线程任务类

/**
 * 异步创建任务
 */
@Async("taskExecutor")
@Override
public void asynsBatchCreateIsueTasks() {
    log.info("这是一个异步任务");
}

到此这篇关于SpringBoot的@EnableAsync和@Async注解分析的文章就介绍到这了,更多相关SpringBoot的@EnableAsync内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java设计模式之访问模式(Visitor者模式)介绍

    Java设计模式之访问模式(Visitor者模式)介绍

    这篇文章主要介绍了Java设计模式之访问模式(Visitor者模式)介绍,本文讲解了为何使用Visitor模式、如何使用Visitor模式、使用Visitor模式的前提等内容,需要的朋友可以参考下
    2015-03-03
  • SpringBoot3集成ElasticSearch的方法详解

    SpringBoot3集成ElasticSearch的方法详解

    Elasticsearch是一个分布式、RESTful风格的搜索和数据分析引擎,适用于各种数据类型,数字、文本、地理位置、结构化数据、非结构化数据,本文给大家详解介绍了SpringBoot3集成ElasticSearch的方法,需要的朋友可以参考下
    2023-08-08
  • Java中截取字符串方法的两种用法

    Java中截取字符串方法的两种用法

    这篇文章主要给大家介绍了关于Java中截取字符串方法的两种用法,在Java开发中经常会涉及到对字符串进行截取操作,字符串截取是一种常见且重要的字符串处理技巧,可以根据实际需求获取字符串的指定部分,需要的朋友可以参考下
    2023-09-09
  • Java多线程实现多人聊天室功能

    Java多线程实现多人聊天室功能

    这篇文章主要为大家详细介绍了Java多线程实现多人聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-06-06
  • MyBatis在insert插入操作时返回主键ID的配置(推荐)

    MyBatis在insert插入操作时返回主键ID的配置(推荐)

    这篇文章主要介绍了MyBatis在insert插入操作时返回主键ID的配置的相关资料,需要的朋友可以参考下
    2017-10-10
  • java实现京东登陆示例分享

    java实现京东登陆示例分享

    这篇文章主要介绍了使用java实现的京东商城登陆示例,需要的朋友可以参考下
    2014-03-03
  • java和jsp中的request使用示例

    java和jsp中的request使用示例

    这篇文章主要介绍了java和jsp中的request使用示例,需要的朋友可以参考下
    2014-02-02
  • spring boot实现上传图片并在页面上显示及遇到的问题小结

    spring boot实现上传图片并在页面上显示及遇到的问题小结

    最近在使用spring boot搭建网站的过程之中遇到了有点小问题,最终解决方案是在main目录下新建了一个webapp文件夹,并且对其路径进行了配置,本文重点给大家介绍spring boot实现上传图片并在页面上显示功能,需要的朋友参考下吧
    2017-12-12
  • 浅谈Springboot之于Spring的优势

    浅谈Springboot之于Spring的优势

    这篇文章主要介绍了浅谈Springboot之于Spring的优势,简述了在Java EE开发中遇到的问题,言简意赅,需要的朋友可以参考下。
    2017-09-09
  • Java并发容器介绍

    Java并发容器介绍

    这篇文章主要介绍了Java并发容器,Java并发包(concurrent)是Java用来处理并发问题的利器,该并发包中主要有原子类,锁(lock),并发容器类等等。本系列博客主要就是介绍并发包中一些常用的并发容器,常用的类,那么我们就来看看下面文章的详细内容吧
    2021-10-10

最新评论