Ver código fonte

feat(wechat): 防止 AccessTokenCron 并发执行

- 新增 isRunning 标志避免重复运行
- 在执行前检查是否已在运行
- 执行结束后重置运行状态
- 优化定时任务执行逻辑防止冲突
runphp 4 meses atrás
pai
commit
3791c8345e
1 arquivos alterados com 7 adições e 0 exclusões
  1. 7 0
      src/Cron/AccessTokenCron.php

+ 7 - 0
src/Cron/AccessTokenCron.php

@@ -24,6 +24,8 @@ class AccessTokenCron extends BaseJob
 
     private string $cacheKey;
 
+    private bool $isRunning;
+
     public function __construct(private MiniApp $miniApp)
     {
         $this->accessToken = $this->miniApp->getAccessToken();
@@ -42,6 +44,10 @@ class AccessTokenCron extends BaseJob
 
     public function execute(): int
     {
+        if ($this->isRunning) {
+            return Cache::ttl($this->cacheKey);
+        }
+        $this->isRunning = true;
         $oldToken = $this->accessToken->getToken();
         $newToken = $this->accessToken->refresh();
         $expireIn = Cache::ttl($this->cacheKey);
@@ -49,6 +55,7 @@ class AccessTokenCron extends BaseJob
             'time' => date('Y-m-d H:i:s', time() + $expireIn),
             'result' => $oldToken === $newToken ? '未更新' : '已更新',
         ]);
+        $this->isRunning = false;
         return $expireIn;
     }
 }