当前位置: 首页 > news >正文

尚义住房和城乡规划建设局网站桂林最新情况最新数据

尚义住房和城乡规划建设局网站,桂林最新情况最新数据,电商网销,体验营销是什么SpringBoot异步方法支持注解Async应用 1.为什么需要异步方法#xff1f; 合理使用异步方法可以有效的提高执行效率 同步执行(同在一个线程中): 异步执行(开启额外线程来执行): 2.SpringBoot中的异步方法支持 在SpringBoot中并不需要我们自己去创建维护线程或者线程池来… SpringBoot异步方法支持注解Async应用 1.为什么需要异步方法 合理使用异步方法可以有效的提高执行效率 同步执行(同在一个线程中): 异步执行(开启额外线程来执行): 2.SpringBoot中的异步方法支持 在SpringBoot中并不需要我们自己去创建维护线程或者线程池来异步的执行方法, SpringBoot已经提供了异步方法支持注解. EnableAsync // 使用异步方法时需要提前开启(在启动类上或配置类上) Async // 被async注解修饰的方法由SpringBoot默认线程池(SimpleAsyncTaskExecutor)执行service层 Service public class ArticleServiceImpl {// 查询文章public String selectArticle() {// 模拟文章查询操作System.out.println(查询任务线程Thread.currentThread().getName());return 文章详情;}// 文章阅读量1Asyncpublic void updateReadCount() {try {// 模拟耗时操作Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(更新任务线程Thread.currentThread().getName());} }controller层 RestController public class AsyncTestController {Autowiredprivate ArticleServiceImpl articleService;/*** 模拟获取文章后阅读量1*/GetMapping(/article)public String getArticle() {long start System.currentTimeMillis();// 查询文章String article articleService.selectArticle();// 阅读量1articleService.updateReadCount();long end System.currentTimeMillis();System.out.println(文章阅读业务执行完毕,执行共计耗时:(end-start));return article;}}测试结果: 我们可以感受到接口响应速度大大提升, 而且从日志中key看到两个执行任务是在不同的线程中执行的 查询任务线程http-nio-8800-exec-3 文章阅读业务执行完毕,执行共计耗时:56 更新任务线程task-13.自定义线程池执行异步方法 SpringBoot为我们默认提供了线程池(SimpleAsyncTaskExecutor)来执行我们的异步方法, 我们也可以自定义自己的线程池. 第一步配置自定义线程池 EnableAsync // 开启多线程, 项目启动时自动创建 Configuration public class AsyncConfig {Bean(customExecutor)public ThreadPoolTaskExecutor asyncOperationExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();// 设置核心线程数executor.setCorePoolSize(8);// 设置最大线程数executor.setMaxPoolSize(20);// 设置队列大小executor.setQueueCapacity(Integer.MAX_VALUE);// 设置线程活跃时间(秒)executor.setKeepAliveSeconds(60);// 设置线程名前缀分组名称executor.setThreadNamePrefix(AsyncOperationThread-);executor.setThreadGroupName(AsyncOperationGroup);// 所有任务结束后关闭线程池executor.setWaitForTasksToCompleteOnShutdown(true);// 初始化executor.initialize();return executor;} }第二步, 在Async注解上指定执行的线程池即可 // 文章阅读量1 Async(customExecutor) public void updateReadCount() {// TODO 模拟耗时操作try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(更新文章阅读量线程Thread.currentThread().getName()); }测试结果 查询任务线程http-nio-8800-exec-1 文章阅读业务执行完毕,执行共计耗时:17 更新任务线程AsyncOperationThread-14.如何捕获(无返回值的)异步方法中的异常 以实现AsyncConfigurer接口的getAsyncExecutor方法和getAsyncUncaughtExceptionHandler方法改造配置类 自定义异常处理类CustomAsyncExceptionHandler EnableAsync // 开启多线程, 项目启动时自动创建 Configuration public class AsyncConfig implements AsyncConfigurer {Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor new ThreadPoolTaskExecutor();// 设置核心线程数executor.setCorePoolSize(8);// 设置最大线程数executor.setMaxPoolSize(20);// 设置队列大小executor.setQueueCapacity(Integer.MAX_VALUE);// 设置线程活跃时间(秒)executor.setKeepAliveSeconds(60);// 设置线程名前缀分组名称executor.setThreadNamePrefix(AsyncOperationThread-);executor.setThreadGroupName(AsyncOperationGroup);// 所有任务结束后关闭线程池executor.setWaitForTasksToCompleteOnShutdown(true);// 初始化executor.initialize();return executor;}Overridepublic AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {return new CustomAsyncExceptionHandler();} } public class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {Overridepublic void handleUncaughtException(Throwable throwable, Method method, Object... obj) {System.out.println(异常捕获---------------------------------);System.out.println(Exception message - throwable.getMessage());System.out.println(Method name - method.getName());for (Object param : obj) {System.out.println(Parameter value - param);}System.out.println(异常捕获---------------------------------);}}测试结果 查询任务线程http-nio-8800-exec-1 文章阅读业务执行完毕,执行共计耗时:20 异常捕获--------------------------------- Exception message - / by zero Method name - updateReadCount 异常捕获---------------------------------5.如何获取(有返回值)异步方法的返回值 使用Future类及其子类来接收异步方法返回值 注意: 无返回值的异步方法抛出异常不会影响Controller的主要业务逻辑有返回值的异步方法抛出异常会影响Controller的主要业务逻辑 // 异步方法--------------------------------------------------------------------- Async public CompletableFutureInteger updateReadCountHasResult() {try {// 模拟耗时操作Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(更新文章阅读量线程Thread.currentThread().getName());return CompletableFuture.completedFuture(100 1); }// Controller调用--------------------------------------------------------------------- GetMapping(/article) public String getArticle() throws ExecutionException, InterruptedException {// 查询文章String article articleService.selectArticle();// 阅读量1CompletableFutureInteger future articleService.updateReadCountHasResult();int count 0;// 循环等待异步请求结果while (true) {if(future.isCancelled()) {System.out.println(异步任务取消);break;}if (future.isDone()) {count future.get();System.out.println(count);break;}}System.out.println(文章阅读业务执行完毕);return article count; }6.常见失效场景 主启动类或者配置类没有添加EnableAsync注解A方法调用被Async注解修饰的B方法 RestController public class UserController {Resourceprivate UserService userService;RequestMapping(/getAll)public void getUsers(){System.out.println(业务开始);test();System.out.println(业务结束);}Asyncpublic void test(){try {Thread.sleep(2000);System.out.println(Thread.currentThread().getName()查询到了所有的用户信息);} catch (InterruptedException e) {throw new RuntimeException(e);}} }被Async注解修饰的方法必须不可以是static和private必须为public需要通过Autowired或Resource进行注入不可手动new基于SpringAOP实现
http://wiki.neutronadmin.com/news/151931/

相关文章:

  • 各地信息推广平台电脑系统优化软件十大排名
  • 吉林省住房建设保障厅网站公司的网站建设与维护论文
  • 网站的建设会计入哪个科目网站套餐可以分摊吗吗
  • 哪些网站做的比较好的学网站建设工作
  • 黑河网站制作动效做的好的网站
  • 大连网站制作公司曲靖珠江网最新消息
  • 鄱阳做网站上饶便宜的做网站公司
  • 什么叫网站开发应用框架全国工商企业查询网
  • 传媒类网站模板鸣蝉小程序制作平台
  • 专业网站建设维护是什么wordpress取消邮箱
  • 手机怎样建立网站七牛图片样式wordpress
  • 保定哪个公司做网站好怎样进入小程序入口啊
  • 两学一做网站答题网址在网站建设中什么用于搭建页面结构
  • 建设一个很大的视频网站需要多少钱哪里学网站开发好
  • h5手机网站建设哪家好wordpress 调用discuz
  • asp.net建立网站吗网站维护中
  • 专业做曝光引流网站去国外做非法网站吗
  • 什么是网站建设技术网站怎样做301跳转
  • 网站上职业学校排名 该怎么做龙口网站建设公司哪家好
  • 国外个人网站域名注册网站建设的工具
  • 京东客网站怎么做的山东省住房和城乡建设厅网站6
  • 地方网站盈利模式济宁网站建设怎么样
  • 湛江企业自助建站做网站模板 优帮云
  • 深圳平台型网站建设公司seo免费优化网站
  • 郯城县网站建设网站底部优化文字
  • 厦门思明区建设局网站客户提出网站建设申请
  • php p2p网站建设wordpress 定时采集
  • 用jsp做一网站的流程微信怎么自己创建公众号
  • 许昌住房和城乡建设部网站河北网站备案管理系统
  • c 视频网站开发万网的成品网站