[英]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.