课程章节介绍
好,同学们,我们来看一下这张幻灯片,它通过两个关键示例,给我们演示了终结器模式到底怎么用。
第一个示例叫做LoggingFinalizer。这个类同时实现了Schedulable接口和Finalizer接口,所以它既能被定时调度,又能充当终结器。它的思路很简单:当它作为一个可调度的作业开始执行时,会在运行过程中把各种日志消息先“缓冲”起来,也就是暂存在一个列表里。紧接着,它通过attachFinalizer把自己附加为终结器。这样一来,不管这个作业最终是成功还是失败,终结器的execute方法都会被调用,然后我们就可以在里面把缓冲的日志一口气提交出去。这有点像你出去采购,先在一张小纸条上随手记下每笔开销,最后不管采购顺不顺利,回到公司都会把纸条上的账目整理好交给财务。
第二个示例叫做RetryLimitDemo,它展示了怎么给失败的作业自动重试。假设我们有一个队列作业,执行过程中可能会因为网络抖动之类的原因失败。那我们就在它的终结器里做文章:一旦发现作业失败了,先检查一下重试次数,只要还没超过我们设置的5次上限,就重新把作业塞回队列。这样既避免了因为一点小问题就让整个工作泡汤,又通过上限避免无休止地重试下去,符合平台对链式作业深度的限制。
除了这两个示例,幻灯片还特别提醒我们一些常见的排错场景,这些对调试非常有帮助。比如说,你有可能不小心对一个作业附加了多个终结器;或者在调用attachFinalizer的时候,传入的对象根本就没实现Finalizer接口,也就是类型不对;再或者,你在不能附加终结器的上下文里调用了它,比如不在队列作业的执行范围内。所有这些错误,都会在调试日志里生成特定的错误信息,一看就知道哪里出了问题。另外,如果你配置了Splunk这样的日志分析平台,还能看到更丰富的错误详情,包括具体的作业ID和类ID,帮我们迅速锁定故障点。
好了,以上就是这两个关键示例以及相关的排查要点,希望大家能对终结器模式的理解更深一步。
关键词
Apex
Salesforce
Developer Guide