> 文章列表 > springboot、@Async实现异步调用

springboot、@Async实现异步调用

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  : 注册送积分