1.安装
composer require hyperf/crontab
2.启动任务调度器进程
在使用定时任务组件之前,需要先在 config/autoload/processes.php 内注册一下 Hyperf\Crontab\Process\CrontabDispatcherProcess 自定义进程,如下:
<?php
declare(strict_types=1);
/**
* This file is part of Hyperf.
*
* @link https://www.hyperf.io
* @document https://hyperf.wiki
* @contact group@hyperf.io
* @license https://github.com/hyperf/hyperf/blob/master/LICENSE
*/
return [
Hyperf\Crontab\Process\CrontabDispatcherProcess::class,
];
同时,您还需要将 config/autoload/crontab.php 内的 enable 配置设置为 true,表示开启定时任务功能,如配置文件不存在可自行创建,配置如下:
<?php
return [
// 是否开启定时任务
'enable' => true,
];
3.定义定时任务
<?php
namespace App\Task;
use App\Model\mapper\UserModelInterface;
use Hyperf\Contract\StdoutLoggerInterface;
use Hyperf\Crontab\Annotation\Crontab;
use Hyperf\Logger\LoggerFactory;
use Psr\Log\LoggerInterface;
/**
* @Crontab(name="FooTask自定义定时任务", rule="*\/10 * * * * *", callback="foo", memo="这是一个示例的定时任务")
*/
class FooTask
{
/**
* @var StdoutLoggerInterface
*/
protected $logger;
private $userModel;
public function __construct(LoggerFactory $loggerFactory,UserModelInterface $userModel)
{
$this->logger = $loggerFactory->get('log', 'default');
$this->userModel = $userModel;
}
public function execute()
{
$res = $this->userModel->addUser([
"dept_id" => 103,
"user_name" => "周玮",
"nick_name" => "周玮",
"user_type" => "00",
"email" => "",
"phonenumber" => "",
"sex" => "0",
"avatar" => "",
"password" => "6151565641546",
]);
$this->logger->info(date('Y-m-d H:i:s', time()),[
"dept_id" => 103,
"user_name" => "周玮",
"nick_name" => "周玮",
"user_type" => "00",
"email" => "",
"phonenumber" => "",
"sex" => "0",
"avatar" => "",
"password" => "6151565641546",
]);
var_dump("12224545646454564");
}
public function foo()
{
$this->logger->info("foo定时任务",[
"name" => "小王",
"phone" => "15507489658",
"sex" => "1",
]);
}
}