在项目中使用多线程,除了常用的构建一个线程池工具类,在springboot中,还可以使用注解来实现,看下面的例子。
首先使用springboot 1.5.10版本,来看pom文件:
使用注解实现异步操作不需要引入任何额外依赖。下一步需要把启动异步的注解配置在启动类上面:
然后再手动配置一个线程池:
这样关于注解异步执行的配置就完成了。下面写实际的异步方法:
注意@Async注解可以放在需要异步执行的方法上面,也可以放在整个类上面,表示类中的所有方法都是异步的。然后写一个简单的接口:
可以看到接口中代码的顺序是,先调用的异步方法,在执行controller日志打印,现在来启动项目,调用接口,查看日志:
可以看到,虽然先调用out方法,但是controller的日志打印却是先执行的,确实是异步执行。下面我们来把out方法的异步注解去掉:
重启项目,调用接口,查看日志:
可以看到去掉注解后执行顺序变成了同步。上面的线程池配置类如果不写,那么会使用默认的线程池,不过建议都要进行配置,这样可以根据服务器的性能进行调整,更加合理。
下面来看2.1.6版本的springboot的使用,比起老版本更加简单,不需要再写线程池配置类,只需要在配置文件中配置即可:
注释掉配置类,重启项目:
可以看到高版本的使用更加简洁,对代码无污染!定时任务也是一样,在启动类上加上启用注解:
增加线程池配置:
写几个测试定时任务:
启动查看定时任务线程池效果:
可以看到定时任务使用的是单独配置的线程池!也可以让定时任务使用async注解配置的线程池,去掉定时任务线程池配置,在定时任务类上面加上@Async注解:
可以看到运行效果:
虽然用注解的方式配置一个线程池非常方便,可以到处使用,但是还是建议给定时任务单独配置一个,不过资源分配小一些,比如分配两三个核心线程数量,这样定时任务和业务都可以保证一定的系统资源,且互不影响!
代码地址: https://gitee.com/blueses/spring-boot-demo