1 开发场景说明
项目有个功能是在处理请求后推送公众号消息给用户。
请求的响应无需等到推送公众号消息之后,此时公众号消息推送应选择异步调用。
2 使用
1)启动类添加注解@EnableAsync,开启异步调用
@SpringBootApplication
@EnableAsync
public class WxappApplication {
public static void main(String[] args) {
SpringApplication.run(WxappApplication.class, args);
}
@Bean
public TaskScheduler taskScheduler() {
ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();
//设置线程池大小
taskScheduler.setPoolSize(10);
return taskScheduler;
}
}
2)另一个类下创建异步方法,使用@Async注解(在同一类下的@Async注解无效)
@Service
public class UsrNoticeServiceImpl implements IUsrNoticeService {
@Async
public void sendAwardNotice(){
//...
}
}
3)异步调用
@RestController
public class UsrAwardController extends BaseController {
@Autowired
private IUsrNoticeService noticeService;
@RequestMapping(value = "/sendAward", method = RequestMethod.POST)
public ResponseMessage<UsrAward> sendAward(@RequestBody JSONObject jsonObject) {
//业务处理
UsrAward award = insertAward();
//公众号消息推送
noticeService.sendAwardNotice();
return apiResultMap("赠送成功", award);
}
}