常规监听器

若作业处理作业服务器的文件,处理完成后删除文件,可考虑使用每个节点均执行清理任务。 此类型任务实现简单,且无需考虑全局分布式任务是否完成,应尽量使用此类型监听器。

  1. public class MyJobListener implements ElasticJobListener {
  2. @Override
  3. public void beforeJobExecuted(ShardingContexts shardingContexts) {
  4. // do something ...
  5. }
  6. @Override
  7. public void afterJobExecuted(ShardingContexts shardingContexts) {
  8. // do something ...
  9. }
  10. @Override
  11. public String getType() {
  12. return "simpleJobListener";
  13. }
  14. }

分布式监听器

若作业处理数据库数据,处理完成后只需一个节点完成数据清理任务即可。 此类型任务处理复杂,需同步分布式环境下作业的状态同步,提供了超时设置来避免作业不同步导致的死锁,应谨慎使用。

  1. public class MyDistributeOnceJobListener extends AbstractDistributeOnceElasticJobListener {
  2. private static final long startTimeoutMills = 3000;
  3. private static final long completeTimeoutMills = 3000;
  4. public MyDistributeOnceJobListener() {
  5. super(startTimeoutMills, completeTimeoutMills);
  6. }
  7. @Override
  8. public void doBeforeJobExecutedAtLastStarted(ShardingContexts shardingContexts) {
  9. // do something ...
  10. }
  11. @Override
  12. public void doAfterJobExecutedAtLastCompleted(ShardingContexts shardingContexts) {
  13. // do something ...
  14. }
  15. @Override
  16. public String getType() {
  17. return "distributeOnceJobListener";
  18. }
  19. }

添加SPI实现

将JobListener实现添加至infra-common下resources/META-INF/services/org.apache.shardingsphere.elasticjob.infra.listener.ElasticJobListener