Flutter定时任务管理插件mongo_cron的使用
Flutter定时任务管理插件mongo_cron的使用
MongoCron 是一个基于 MongoDB 的定时任务调度器,适用于 Dart 开发者。它允许你使用 cron 表达式来安排任务,并将这些任务持久化到 MongoDB 中。
特性
- 使用 cron 表达式来调度任务(如果你不熟悉 cron 表达式,可以使用 Cronitor 来帮助理解)
- 将任务持久化到 MongoDB
- 提供各种 cron 事件的回调(启动、停止、空闲、错误)
处理速度
当越来越多的文档被添加到集合中时,处理速度可能会降低。我们可以通过创建以下索引来保持速度:
await _collection.createIndex(key: 'name', unique: true);
await _collection.createIndex(keys: {'sleepUntil': 1, 'name': 1});
使用方法
你可以查看 示例代码 获取完整的示例。
import 'package:mongo_cron/mongo_cron.dart';
import 'package:mongo_dart/mongo_dart.dart';
void main() async {
// 连接到本地 MongoDB 数据库
final db = await Db.create('mongodb://localhost:27017/your_database');
await db.open();
// 配置 MongoCron 实例
final config = MongoCronConfig(
database: db,
onStart: (MongoCron cron) async {
print('MongoCron started');
},
onStop: (MongoCron cron) async {
print('MongoCron stopped');
},
onIdle: (MongoCron cron) async {
print('MongoCron is idle');
},
onError: (dynamic error, MongoCron cron) async {
print('Error occurred: $error');
if (!db.isConnected) {
print('MongoDB disconnected—reconnecting...');
await db.close();
await db.open();
print('MongoDB reconnected');
}
},
onJobStart: (Job job) async {
print(
'${DateTime.now().toIso8601String()} Job started: ${job.name} #${job.id}');
},
onJobComplete: (Job job) async {
print(
'${DateTime.now().toIso8601String()} Job complete: ${job.name} #${job.id}');
},
);
// 创建并配置 MongoCron 实例
final mongoCron = MongoCron(config);
// 添加一个任务
await mongoCron.addJob(
cronExpression: '*/5 * * * *', // 每 5 分钟执行一次
name: 'job1',
handler: (Job job) async {
print('Executing job ${job.id} with data: ${job.data}');
},
jobData: {'message': 'Hello, World!'}, // 传递给任务的数据
);
// 启动 Cron
await mongoCron.start();
// 在运行过程中可以添加更多任务
await mongoCron.addJob(
cronExpression: '* * * * *', // 每分钟执行一次
name: 'job2',
handler: (Job job) async {
print('Second job');
},
);
// 运行一段时间
await Future.delayed(const Duration(seconds: 30));
// 停止 Cron
await mongoCron.stop();
await db.close();
}
代码解释
-
连接到 MongoDB 数据库:
final db = await Db.create('mongodb://localhost:27017/your_database'); await db.open();
这里我们创建并打开了一个 MongoDB 数据库实例。
-
配置 MongoCron 实例:
final config = MongoCronConfig( database: db, onStart: (MongoCron cron) async { print('MongoCron started'); }, onStop: (MongoCron cron) async { print('MongoCron stopped'); }, onIdle: (MongoCron cron) async { print('MongoCron is idle'); }, onError: (dynamic error, MongoCron cron) async { print('Error occurred: $error'); if (!db.isConnected) { print('MongoDB disconnected—reconnecting...'); await db.close(); await db.open(); print('MongoDB reconnected'); } }, onJobStart: (Job job) async { print( '${DateTime.now().toIso8601String()} Job started: ${job.name} #${job.id}'); }, onJobComplete: (Job job) async { print( '${DateTime.now().toIso8601String()} Job complete: ${job.name} #${job.id}'); }, );
这里我们配置了 MongoCron 实例,定义了启动、停止、空闲和错误时的回调函数。
-
创建并配置 MongoCron 实例:
final mongoCron = MongoCron(config);
-
添加任务:
await mongoCron.addJob( cronExpression: '*/5 * * * *', // 每 5 分钟执行一次 name: 'job1', handler: (Job job) async { print('Executing job ${job.id} with data: ${job.data}'); }, jobData: {'message': 'Hello, World!'}, // 传递给任务的数据 );
我们添加了一个任务,并设置了 cron 表达式、任务名称和处理函数。
-
启动 Cron:
await mongoCron.start();
-
在运行过程中添加更多任务:
await mongoCron.addJob( cronExpression: '* * * * *', // 每分钟执行一次 name: 'job2', handler: (Job job) async { print('Second job'); }, );
-
运行一段时间后停止 Cron:
await Future.delayed(const Duration(seconds: 30)); await mongoCron.stop(); await db.close();
更多关于Flutter定时任务管理插件mongo_cron的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter定时任务管理插件mongo_cron的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
mongo_cron
是一个用于在 Flutter 应用中管理定时任务的插件,它基于 MongoDB 的 TTL(Time-To-Live)索引和 change streams
功能来实现定时任务的调度和执行。通过 mongo_cron
,你可以轻松地在 Flutter 应用中创建、管理和执行定时任务。
安装 mongo_cron
首先,你需要在 pubspec.yaml
文件中添加 mongo_cron
作为依赖项:
dependencies:
flutter:
sdk: flutter
mongo_cron: ^0.1.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
使用 mongo_cron
1. 初始化 MongoDB 连接
在使用 mongo_cron
之前,你需要先连接到 MongoDB 数据库。你可以使用 mongo_dart
或其他 MongoDB 客户端库来建立连接。
import 'package:mongo_dart/mongo_dart.dart';
final db = await Db.create('mongodb://localhost:27017/mydatabase');
await db.open();
2. 创建 MongoCron
实例
接下来,你需要创建一个 MongoCron
实例,并传入 MongoDB 数据库连接。
import 'package:mongo_cron/mongo_cron.dart';
final mongoCron = MongoCron(db);
3. 添加定时任务
你可以使用 mongoCron.addJob
方法来添加定时任务。每个任务都需要指定一个唯一的 jobId
、一个 cron
表达式(用于定义任务的执行时间)以及一个回调函数(在任务执行时调用)。
mongoCron.addJob(
jobId: 'myJob',
cron: '*/5 * * * * *', // 每5秒执行一次
callback: () {
print('Job executed at ${DateTime.now()}');
},
);
4. 启动定时任务管理器
添加任务后,你需要启动 mongoCron
来开始执行定时任务。
mongoCron.start();
5. 停止定时任务管理器
当你不再需要执行定时任务时,可以调用 mongoCron.stop()
来停止任务管理器。
mongoCron.stop();
6. 删除定时任务
如果你想要删除某个定时任务,可以使用 mongoCron.removeJob
方法。
mongoCron.removeJob('myJob');
完整示例
以下是一个完整的示例,展示了如何使用 mongo_cron
在 Flutter 应用中管理定时任务:
import 'package:flutter/material.dart';
import 'package:mongo_dart/mongo_dart.dart';
import 'package:mongo_cron/mongo_cron.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final db = await Db.create('mongodb://localhost:27017/mydatabase');
await db.open();
final mongoCron = MongoCron(db);
mongoCron.addJob(
jobId: 'myJob',
cron: '*/5 * * * * *', // 每5秒执行一次
callback: () {
print('Job executed at ${DateTime.now()}');
},
);
mongoCron.start();
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('MongoCron Example'),
),
body: Center(
child: Text('Check the console for job execution logs.'),
),
),
);
}
}