23日0321-UCore任务调度迁移到ServiceProvider.md 3.1 KB

UCore任务调度迁移到ServiceProvider

时间: 2025年06月23日 03:21
任务: 将UCore的任务调度从console.php迁移到ServiceProvider注册

任务背景

根据项目架构规范,UCore任务调度应该使用ServiceProvider注册,而不是在routes/console.php中直接配置。需要将UCore相关的定时任务从console.php中移除,并在UCore的CommandServiceProvider中注册。

实施步骤

1. 分析现状

  • 检查routes/console.php中的UCore相关调度
  • 发现ucore:clean-size-rotating-logs命令每天凌晨3点执行
  • 查看UCore/Providers/CommandServiceProvider.php的现有结构

2. 修改UCore/Providers/CommandServiceProvider.php

  • 添加Illuminate\Console\Scheduling\Schedule导入
  • 在boot()方法中调用registerSchedules()方法
  • 新增registerSchedules()方法:
    • 使用$this->app->booted()确保在应用启动完成后注册
    • 注册ucore:clean-size-rotating-logs调度:每天凌晨3点执行
    • 添加描述信息:'清理UCore轮转日志文件'

3. 从routes/console.php中移除UCore调度

  • 删除ucore:clean-size-rotating-logs的调度配置行
  • 保留其他模块的调度配置不变

4. 验证功能

  • 执行php artisan schedule:list确认调度注册成功
  • 确认UCore调度显示正确的执行时间和描述

技术实现

修改的文件

  1. UCore/Providers/CommandServiceProvider.php

    protected function registerSchedules(): void
    {
       // 在应用完全启动后注册定时任务
       $this->app->booted(function () {
           $schedule = $this->app->make(Schedule::class);
               
           // 每天凌晨3点清理 size_rotating_daily 日志文件(保留配置的天数)
           $schedule->command('ucore:clean-size-rotating-logs')
               ->dailyAt('03:00')
               ->description('清理UCore轮转日志文件');
       });
    }
    
  2. routes/console.php

    • 移除了UCore相关的调度配置

验证结果

执行php artisan schedule:list显示:

0 3 * * *  php artisan ucore:clean-size-rotating-logs ............................ Next Due: 23小时后

调度成功注册,功能正常。

优势

  1. 架构清晰: UCore的调度逻辑集中在自己的ServiceProvider中
  2. 模块化: 每个模块管理自己的调度,便于维护
  3. 可扩展: 后续UCore新增调度可以直接在registerSchedules()方法中添加
  4. 符合规范: 遵循项目架构设计原则

提交信息

重构:将UCore任务调度从console.php迁移到ServiceProvider注册

- 在UCore/Providers/CommandServiceProvider.php中添加registerSchedules()方法
- 使用$this->app->booted()确保在应用启动完成后注册调度
- 将ucore:clean-size-rotating-logs调度从routes/console.php迁移到ServiceProvider
- 保持调度功能不变:每天凌晨3点清理轮转日志文件
- 验证调度注册成功,php artisan schedule:list显示正常

总结

成功将UCore的任务调度从routes/console.php迁移到UCore的CommandServiceProvider中,实现了更好的模块化架构。调度功能保持不变,但代码组织更加清晰和规范。