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

浅谈旅游网站的规划与建设湖北省建设交易协会网站

浅谈旅游网站的规划与建设,湖北省建设交易协会网站,网站维护预算,同一个服务器的网站做友情链接在一些后台耗时的场景比如说生成统计报表,生成数据文件,执行批量任务时候,需要异步执行,先登记信息,然后异步执行批量同步返回给客户端。在spring中要想使用异步方法执行,必须使用EnableAsync注解开启async…

在一些后台耗时的场景比如说生成统计报表,生成数据文件,执行批量任务时候,需要异步执行,先登记信息,然后异步执行批量同步返回给客户端。在spring中要想使用异步方法执行,必须使用@EnableAsync注解开启async。

开启异步执行配置

@Configuration
@EnableAsync
@ComponentScan(basePackages = {"com.cpx.service.async"})
public class AsyncConfig {}

然后在需要异步执行的方法上添加@Async注解

@Service
public class AsyncService {@Asyncpublic void exec(){try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println(LocalDateTime.now().toString() +":exec end");}
}

添加@Async注解的方法必须是public的。方法所属的类必须是一个bean才能被扫描到。this方式调用异步方法是没有效果的。因为使用的动态代理。

测试方法的异步执行:

AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AsyncConfig.class);
AsyncService asyncService = (AsyncService) ctx.getBean("asyncService");
System.out.println(LocalDateTime.now().toString()+" start");
asyncService.exec();//该方法调用会异步执行
System.out.println(LocalDateTime.now().toString()+" main end");
ctx.close();

TaskExecutor

方法的异步执行是通过线程池来执行的, spring默认会从beanFactory中尝试去获取TaskExecutor类型的bean,如果获取不到,就会继续尝试获取bean name为’taskExecutor’的bean,还获取不到就创建一个SimpleAsyncTaskExecutor类型的执行器。SimpleAsyncTaskExecutor每来一个任务会启动一个Thread来执行任务,不会重复利用。这么看SimpleAsyncTaskExecutor不是一个严格意义的线程池,线程并不会重用。如果高并发耗时任务可能会导致一定的内存使用问题。这里可以指定线程池。

第一种通过实现AsyncConfigurer接口,然后重写getAsyncExecutor()方法。

public class AsyncConfig implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {//自定义线程池实现ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();threadPoolTaskExecutor.initialize();return threadPoolTaskExecutor;}
}

这种线程池是所有@Async注解都可以使用,另一种可以在@Async(“taskExecutor”)注解上指定线程池名字。

返回值

可以返回一个future。

@Async
public Future<String> exec(){try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}return new AsyncResult<String>("ok");
}

异常处理

有返回的@Async方法异常会被封装到future里,没有返回值的可以定义一个AsyncUncaughtExceptionHandler来处理异常

public class CustomAsyncExceptionHandler implements AsyncUncaughtExceptionHandler {@Overridepublic void handleUncaughtException(Throwable ex, Method method, Object... params) {System.out.println(method.getName()+",发生异常");//TODO}
}

然后在实现AsyncConfigurer的bean里重写getAsyncUncaughtExceptionHandler()返回自定义的异常handler。

异步执行的原理还是通过@EnableAsync引入对应的bean后置处理器,来使用advisor对@Async标识的方法进行代理增强。方法的执行会通过AsyncExecutionInterceptor代理执行。

http://www.yayakq.cn/news/572769/

相关文章:

  • 代码分享wordpress免费seo营销软件
  • 关于门户网站建设方案中信建设有限责任公司国内区事业部招聘
  • 室内设计联盟官方网站登录企业推广
  • 电影网站做视频联盟做窗帘的效果图网站
  • 书籍网站建设规划书阿里巴巴的网站应该怎么做
  • 网站建设外包发展情况今天北京发生大事了
  • 网站百度建设f2c网站建设
  • 网站空间后台怎么进入安卓app制作教程
  • 关于地产设计网站谁会制作网站
  • 网站换服务器对网站排名有影响吗国际最新新闻热点事件
  • 网站配色原理织梦网站加网站地图
  • 公司 网站 源码网站用哪个数据库
  • 黄南州wap网站建设公司建门户网站需要多少钱
  • 网站建设哪个公司的好小程序商城制作教程
  • 深圳做外贸网站的公司网站代码需要注意什么东西
  • 如何建网站商城东莞学平面设计
  • 气象网站建设需求方案韩国企业网站模板下载
  • 网站开发文案模板杭州app定制开发
  • 微网站设计方案哪个网站百度收录快
  • 浦口区城乡建设集团网站做网站多少钱大概
  • 可以把网站生成软件怎么查询在建工程
  • 汽贸公司网站建设家电设计网站
  • 做官方网站公司系部网站建设
  • 电商网页制作教程seo交流中心
  • 工信部个人网站备案律师个人 网站做优化
  • 响应式网站在线微信公众号平台登录入口
  • 学做ppt的网站有哪些内容华为手机一键优化
  • 网站图片引导页怎么做免费的域名网址
  • 网站建设 教程用游戏人物做网站属于侵权吗
  • 公司网站维护由那个部门做专业网站建设公司哪里好