Laravel11任务调度

laravel11简化了应用程序结构,就是说,新建的应用如果直接旧版的习惯去搞,额。。。

如果仔细阅读过上面这句,你会发现,我的意思其实是:不是不行。

laravel11大部分操作都移到了bootstrap/app.php中,

所以咱撸的时候,不管啥玩意都首先考虑往这里面塞:中间件、路由、异常处理、调度。。。。

么一,眼花缭乱。。。。

咱这菜鸡不懂这设计是咋想的,但撸到最后一定是好几十兆的超大号.php

最后还是得拆开。

办法很简单,方法也很多,就是先这样在那样然后就可以了:

确认一下定时任务内容

 php artisan schedule:list

比如我这里用单例绑定:

用command创建一个Kernel类:

php artisan make:class App/Console/Kernel

 

make:class 属于laravel11新增的一个make方法

然后,这个类继承Illuminate\Foundation\Console\Kernel

并且实现一个接收'Illuminate\Console\Scheduling\Schedule'的schedule()方法

修改后的代码如下

//app/Console/Kernel.php
<?php

namespace App\Console;
use Illuminate\Foundation\Console\Kernel as ConsoleKernel;
use Illuminate\Console\Scheduling\Schedule;
class Kernel extends ConsoleKernel
{
    protected function schedule(Schedule $schedule): void
    {

        //写一个不知道这是干啥的任务进去,让它几秒钟跑一次,并且它能在schedule:run在无任务时避免supervisor异常退出
        //所以我就留着它了,你也可以用其它空命令代替
        //或者其它之前没有的命令
        $schedule->command('inspire')->everySecond();

    }


}

然后绑定到应用里面:

修改那个即将变成超大号.php的文件

在里面随便找个位置添加一个withSingletons()

//bootstrap/app.php
<?php

use Illuminate\Foundation\Application;
use Illuminate\Foundation\Configuration\Exceptions;
use Illuminate\Foundation\Configuration\Middleware;

return Application::configure(basePath: dirname(__DIR__))
    ->withRouting(
        web: __DIR__.'/../routes/web.php',
        commands: __DIR__.'/../routes/console.php',
        health: '/up',
    )
    ->withMiddleware(function (Middleware $middleware) {
        //
    })
    //在这里添加一个withSingletons方法,这个方法接收一个数组参数,这个数组的键是单例的类名,值是单例的实例
    ->withSingletons([
        //将刚才创建的Kernel 类注册进来
        Illuminate\Contracts\Console\Kernel::class=>App\Console\Kernel::class
    ])

    ->withExceptions(function (Exceptions $exceptions) {
        //
    })->create();

 测试下效果

# 查看调度列表
 php artisan schedule:list
php artisan schedule:work

新work的起床气有点重,你得等等,最多一分钟,你就能看到上图这样的内容了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值