簡體   English   中英

在多個數據庫上運行Laravel計划任務的最佳方法是什么?

[英]What is the best way to run a Laravel Scheduled Task over multiple databases?

我有一個laravel網絡應用,其中每個客戶端都有自己的數據庫。 所有數據庫連接都在config / database.php中定義為連接。 我根據請求來自的子域連接到適當的數據庫。 現在,我需要在每個午夜運行一些清潔任務。 我創建了一個命令來完成任務,它適用於laravel應用當前配置為.env文件的默認數據庫。 但是,為所有客戶端數據庫迭代此任務的最佳方法是什么?

使用Laravel的Config類非常容易完成。 連接多個MySQL服務器和多個數據庫以從服務器獲取一些信息時,我遇到了同樣的問題。 而且我不得不處理數量不確定的服務器。 因此,我找到了一個通用的解決方案,也將為您服務!

考慮命令的Handle()函數的以下結構:

public function handle()
{
    $arrayOfConnections = config('database.connections'); // Array of connections

    foreach($arrayOfConnections as $connection){
        // Setting Config
        Config::set('database.connections.dynamicConnection.host',$connection->host);
        Config::set('database.connections.dynamicConnection.password',$connection->connection);
        // More of your config

        // Your Logic Here

        // Purge the configuration (It is important!)
        DB::purge('dynamicConnection'); 


    }
}

當然,您必須從數組中排除dynamicConnection ,這將需要一個三元運算符或一個條件。 但這就是我的方法。 我的並不完全一樣,我從數據庫中獲取值,因為每隔幾分鍾更新一次配置文件不好,並且在配置文件中沒有關於數百台服務器的信息也不是一件好事。 但這將對您有用(將此代碼視為邏輯,而不是無需進行編輯即可針對您的特定情況開箱即用的魔術)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM