springboot、@Async实现异步调用
以注册送积分模拟异步调用
启动类添加注解 @EnableAsync
@SpringBootApplication
@EnableAsync
public class SpringbootTestApplication {public static void main(String[] args) {SpringApplication.run(SpringbootTestApplication.class, args);}
}
被调用的类或方法添加注解 @Async
@Service
@Slf4j
public class AsyncTaskServiceImpl {ExecutorService executorService= Executors.newFixedThreadPool(5);@Async("ex")public void sendJiFen() {log.info("注册送积分");}@Bean("ex")public Executor jiFenExecutors() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(10);executor.setMaxPoolSize(100);//线程名称前缀executor.setThreadNamePrefix("积分-thread-");return executor;}
}
上述的jiFenExecutors 这个线程池也可以不写
调用测试
@Slf4j
@RestController
@RequestMapping("/async")
public class AsyncController {@ResourceAsyncTaskServiceImpl asyncTaskService;@RequestMapping("/register")public void register(){log.info("注册成功");/* 异步送积分*/asyncTaskService.sendJiFen();}
}
看我们打印出来的日志
2023-04-06 12:19:08.430 INFO 15832 --- [nio-9098-exec-8] com.qyf.controller.AsyncController : 注册成功
2023-04-06 12:19:08.433 INFO 15832 --- [ 积分-thread-1] c.qyf.service.impl.AsyncTaskServiceImpl : 注册送积分