Salesforce异步进程

异步进程:

异步进程用于在单独的线程内来运行进程。异步进程是一个在后台运行,不需要用户等到任务结束的进程或者方法。异步进程好处很多,包括不需要用户等待,节省响应时间等等。

异步进程主要有以下几种形式:

类型

介绍

常用场景

Future方法

在自己线程中运行,直到资源可用才行

Web service callout.

Batch Apex

运行大量的Job,数量超过正常处理限制

数据DML操作

QueueableApex

和Future类似,但是提供额外的工作链,允许完成更复杂的类型

执行顺序处理操作与外部Web服务。

ScheduledApex

计划指定时间运行Apex

固定时间的任务,例如每日或每周等任务

  • Future方法

 Future方法用于异步处理,常用于Web service callout操作.Future方法需要有几个规范:

1.方法必须是静态static的;

2.方法上方需要使用@Future标签;

3.方法返回类型必须是void类型;

4.方法参数必须是模块私有的变量,不能使public等;

5.方法参数不允许使用标准的Object或sObject类型,可以使用基本类型或者集合类型;

6.不能再一个future方法调用另一个future方法,当future方法运行的时候也不可以在trigger中调用;

7.future方法中不能使用getContent()和getContentAsPDF()方法。

  有几点需要注意:

1)future方法执行不保证质量,如果需要好的质量可以使用Queueable方法;

2)可以允许两个future方法同时运行,当两个future方法同时对一条记录进行操作时,可能引起记录锁定或者运行时异常。

  总之,使用future方式不保证质量。。。。。。而且有很多限制,开发的时候能不用就不用,如果必须使用情况下自己评估一下。

  • Queueable

Queueable接口有着类似future的特性,类似将future特性和批处理功能混合在一起,相对future方法来讲,有很大的优势:

1.可以使用Object和sObject类型作为参数;

2.便于监控,可以直接通过System.enqueueJob()方法运行返回AsyncApexJob ,方法不用限制在startTest()和stopTest()方法中;

3.可以链接两个job,一个Queueable接口方法可以调用另一个Queueable接口。

Queueable在执行异步的时候大部分可以替代掉future,但是不是所有的情况都可以替换。当一个方法有时需要同步执行有时需要异步执行,相对来讲用future操作更为简单,毕竟不需要修改方法的内容,只是注解而已。

  • ScheduledApex

   定时任务相对来说,使用比较方便。当你需要在指定时间日期去执行某些操作(比如定期清理垃圾数据等等)时,定时任务就显得尤为便利。

  定时任务的声明和调用都很简单,通过以下步骤即可完成操作:

1.实现Schedulable接口,并重写execute方法,此方法体内实现需要定时执行的操作;

2.使用System.schedule()方法实现定时任务的调用。

注意:定时任务在每24小时同时只允许最多100个定时任务。超过数量则会抛出异常。

System.schedule()方法有三个参数:第一个参数为定时任务名称;第二个参数为定时任务执行时间;第三个参数为需要执行的定时任务的对象。

关于定时任务执行时间有很多需要注意的地方:

执行时间字符串通过空格分隔每个时间点,时间点的顺序为:

Seconds Minutes Hours Day_of_month Month Day_of_week optional_year

最后,Schedulable除了在代码中通过System.schedule()方法启动定时任务还可以通过页面设置启动定时器。步骤如下:

1.点击setup-->develop-->Apex Classes;

2.点击Schedule Apex按钮;

3.输入Job Name,为定时任务显示的任务名称,点击Apex Class的查找按钮选择需要定时任务的实现Schedulable接口的类,设定时间,点击保存;

4.定时任务创建成功,在setup-->Jobs-->Scheduled Jobs中可以看到创建的定时任务了。

通过页面设置启动定时器和代码的区别为:使用页面配置定时器无法精确到分和秒。

上一篇:ElasticSearch简介


下一篇:Fox Electronics车规级晶振介绍