078-Spring Boot 多线程支持 @EnableAsync与@EnableScheduling

在项目中使用多线程,除了常用的构建一个线程池工具类,在springboot中,还可以使用注解来实现,看下面的例子。



首先使用springboot 1.5.10版本,来看pom文件:

使用注解实现异步操作不需要引入任何额外依赖。下一步需要把启动异步的注解配置在启动类上面:

然后再手动配置一个线程池:

这样关于注解异步执行的配置就完成了。下面写实际的异步方法:

注意@Async注解可以放在需要异步执行的方法上面,也可以放在整个类上面,表示类中的所有方法都是异步的。然后写一个简单的接口:

可以看到接口中代码的顺序是,先调用的异步方法,在执行controller日志打印,现在来启动项目,调用接口,查看日志:

可以看到,虽然先调用out方法,但是controller的日志打印却是先执行的,确实是异步执行。下面我们来把out方法的异步注解去掉:

重启项目,调用接口,查看日志:

可以看到去掉注解后执行顺序变成了同步。上面的线程池配置类如果不写,那么会使用默认的线程池,不过建议都要进行配置,这样可以根据服务器的性能进行调整,更加合理。




下面来看2.1.6版本的springboot的使用,比起老版本更加简单,不需要再写线程池配置类,只需要在配置文件中配置即可:

注释掉配置类,重启项目:

可以看到高版本的使用更加简洁,对代码无污染!定时任务也是一样,在启动类上加上启用注解:

增加线程池配置:

写几个测试定时任务:

启动查看定时任务线程池效果:

可以看到定时任务使用的是单独配置的线程池!也可以让定时任务使用async注解配置的线程池,去掉定时任务线程池配置,在定时任务类上面加上@Async注解:

可以看到运行效果:

虽然用注解的方式配置一个线程池非常方便,可以到处使用,但是还是建议给定时任务单独配置一个,不过资源分配小一些,比如分配两三个核心线程数量,这样定时任务和业务都可以保证一定的系统资源,且互不影响!


代码地址: https://gitee.com/blueses/spring-boot-demo

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容