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 {
    @Resource
    AsyncTaskServiceImpl 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  : 注册送积分

你可能感兴趣的:(spring,boot,java)