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

海淀手机网站设计公司苏州建设工程有限公司

海淀手机网站设计公司,苏州建设工程有限公司,聊天软件app开发,找人代做网站需要注意什么Spring提供了两种后台任务的方法,分别是: 调度任务#xff0c;Schedule异步任务#xff0c;Async当然#xff0c;使用这两个是有条件的#xff0c;需要在spring应用的上下文中声明task:annotation-driven/当然#xff0c;如果我们是基于java配置的#xff0c;需要…Spring提供了两种后台任务的方法,分别是: 调度任务Schedule异步任务Async当然使用这两个是有条件的需要在spring应用的上下文中声明task:annotation-driven/当然如果我们是基于java配置的需要在配置哪里加多EnableScheduling和EnableAsync 就像下面这样 1 2 3 4 5 6 EnableScheduling EnableAsync public class WebAppConfig { .... 除此之外还是有第三方库可以调用的例如Quartz. Schedule 先看下Schedule怎么调用再说 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 public final static long ONE_DAY  24 * 60 * 60 * 1000; public final static long ONE_HOUR  60 * 60 * 1000; Scheduled(fixedRate ONE_DAY) public void scheduledTask() { System.out.println( 我是一个每隔一天就会执行一次的调度任务); } Scheduled(fixedDelay ONE_HOURS) public void scheduleTask2() { System.out.println( 我是一个执行完后隔一小时就会执行的任务); } Scheduled(initialDelay1000, fixedRate5000) public void doSomething() { // something that should execute periodically } Scheduled(cron  0 0/1 * * * ? ) public void ScheduledTask3() { System.out.println( 我是一个每隔一分钟就就会执行的任务); } 需要注意的 关于最后一个在指定时间执行的任务里面使用的是Cron表达式同时我们看到了两个不一样的面孔fixedDelay fixedRate前者fixedDelay表示在指定间隔运行程序例如这个程序在今晚九点运行程序跑完这个方法后的一个小时就会再执行一次而后者fixedDelay者是指这个函数每隔一段时间就会被调用我们这里设置的是一天不管再次调度的时候这个方法是在运行还是结束了。而前者就要求是函数运行结束后开始计时的这就是两者区别。 这个还有一个initialDelay的参数是第一次调用前需要等待的时间这里表示被调用后的推迟一秒再执行这适合一些特殊的情况。 我们在serviceImpl类写这些调度任务时候也需要在这些我们定义的serviceInterface的借口中写多这个接口要不然会爆 but not found in any interface(s) for bean JDK proxy.Either pull the method up to an interface or Async 有时候我们会调用一些特殊的任务任务会比较耗时重要的是我们不管他返回的后果。这时候我们就需要用这类的异步任务啦调用后就让他去跑不堵塞主线程我们继续干别的。代码像下面这样: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 public void AsyncTask(){ Async public void doSomeHeavyBackgroundTask(int sleepTime) { try { Thread.sleep(sleepTime); } catch (InterruptedException e) { e.printStackTrace(); } } Async public FutureString doSomeHeavyBackgroundTask() { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } return null; } public void printLog() { System.out.println( i print a log ,time System.currentTimeMillis()); } } 我们写个简单的测试类来测试下 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 RunWith(SpringJUnit4ClassRunner.class) WebAppConfiguration ContextConfiguration(classes AsycnTaskConfig.class) //要声明EnableASync public class AsyncTaskTest { Autowired AsyncTask asyncTask; Test public void AsyncTaskTest() throws InterruptedException { if (asyncTask ! null) { asyncTask.doSomeHeavyBackgroundTask(4000); asyncTask.printLog(); Thread.sleep(5000); } } } 这感觉比我们手动开多一个线程方便多了不想异步的话直接把Async去掉就可以了另外如果你想要返回个结果的这需要加多个Future,关于这个Future完全可以写多几篇文章介绍顺便把FutureTask介绍了。如果想修改Spring boot的默认线程池配置可以实现AsyncConfigurer.需要注意的 相对于scheduled这个可以有参数和返回个结果因为这个是我们调用的而调度的任务是spring调用的。异步方法不能内部调用只能像上面那样外部调用否则就会变成阻塞主线程的同步任务啦这个坑我居然跳下去了例如下面这样的。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 public void AsyncTask(){ public void fakeAsyncTaskTest(){ doSomeHeavyBackgroundTask(4000); printLog(); //你会发现当你像这样内部调用的时候居然是同步执行的不是异步的 } Async public void doSomeHeavyBackgroundTask(int sleepTime) { try { Thread.sleep(sleepTime); } catch (InterruptedException e) { e.printStackTrace(); } } public void printLog() { System.out.println( i print a log ); } } 另外一点就是不要重复的扫描这也会导致异步无效具体的可以看这个stackoveflow的spring-async-not-working Issue。关于异常处理难免在这个异步执行过程中有异常发生对于这个问题spring提供的解决方案如下,实现 AsyncUncaughtExceptionHandler接口。 1 2 3 4 5 6 7 8 9 10 11 public class MyAsyncUncaughtExceptionHandler implements AsyncUncaughtExceptionHandler { Override public void handleUncaughtException(Throwable ex, Method method, Object... params) { // handle exception } } 写好我们的异常处理后我们需要配置一下告诉spring这个异常处理就是我们在运行异步任务时候抛出错误时的异常终结者 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 Configuration EnableAsync public class AsyncConfig implements AsyncConfigurer { Bean public AsyncTask asyncBean() { return new AsyncTask(); } Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor  new ThreadPoolTaskExecutor(); executor.setCorePoolSize(7); executor.setMaxPoolSize(42); executor.setQueueCapacity(11); executor.setThreadNamePrefix(MyExecutor-); executor.initialize(); return executor; } Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return new MyAsyncUncaughtExceptionHandler(); } } Quartz登场 处理这两个外还有一个和spring整合的第三方库叫Quartz看了下官网的使用简介也是挺逗的现在都习惯用mavengradle之类来关系这些依赖了他还叫人下载也是不知为何详情点击http://quartz-scheduler.org/documentation/quartz-2.2.x/quick-start估计有可能是因为没再维护了的原因吧看了下最新版2.2居然是Sep, 2013更新的…居然是停更的不过Quartz作为一个企业级应用的任务调度框架还是一个可以的候选项目的。这里不铺开讲有兴趣就去官网看下吧。整体用起来感觉是没有spring自己的后台任务方便不过也可以接受只需要简单的配置就可以使用了。 http://www.cnblogs.com/slimer/p/6401394.html  转载于:https://www.cnblogs.com/softidea/p/6855034.html
http://www.zqtcl.cn/news/118343/

相关文章:

  • 宁波网站的建设百度网盟推广 网站
  • 大连城乡建设局网站青岛网站建设外贸
  • 石家庄网站建设招聘珠海快速网站建设
  • 网站建设代理ai制作网页
  • 微网站平台怎样做网站wordpress侧栏跟随
  • 手机网站建设好吗湖南省专业建设公司网站的机构
  • 网站代码 字体好用的cms网站
  • 美食网站首页设计用手机怎么看自己做的网站
  • 平台类网站开发怎样做永久网站二维码
  • 网站开发客户挖掘php网站开发心得3500字
  • 检察院做网站的目的青岛网站推广优化
  • dede替换网站模板定制网站建设的流程
  • 天津专业网站制作网站开发模板
  • 做二手车网站需要什么怎样建立门户网站
  • 宁波做网站首荐荣盛网络网站建设太仓
  • 购物网站公司要花费多少钱wordpress 菜单 字体加粗
  • 网站模板如何编辑软件crm免费客户管理系统
  • 微信制作网站设计重庆关键词优化软件
  • 网站的设计与应用论文平台推广计划书模板范文
  • 网站备案用户名忘了怎么办网站做301排名会掉
  • 厦门制作网站企业网站子域名怎么做
  • 青岛微网站开发品牌建设青之见
  • 淄博哪有培训做网站的湖南营销型网站建设企业
  • 动物网站建设深圳最好的营销网站建设公司
  • 各种网站制作陕西建设厅证件查询网站
  • 如何提高一个网站如何做简单网站
  • 游戏网站开发找什么人可建智慧园区设计方案
  • 重庆网站设计公司推荐福州移动网站建设
  • 移动网站功能做网站fjfzwl
  • 食品网站建设的目的中级经济师考试成绩查询