Chet.QuartzNet.EFCore.MySQL
1.3.1
See the version list below for details.
dotnet add package Chet.QuartzNet.EFCore.MySQL --version 1.3.1
NuGet\Install-Package Chet.QuartzNet.EFCore.MySQL -Version 1.3.1
<PackageReference Include="Chet.QuartzNet.EFCore.MySQL" Version="1.3.1" />
<PackageVersion Include="Chet.QuartzNet.EFCore.MySQL" Version="1.3.1" />
<PackageReference Include="Chet.QuartzNet.EFCore.MySQL" />
paket add Chet.QuartzNet.EFCore.MySQL --version 1.3.1
#r "nuget: Chet.QuartzNet.EFCore.MySQL, 1.3.1"
#:package Chet.QuartzNet.EFCore.MySQL@1.3.1
#addin nuget:?package=Chet.QuartzNet.EFCore.MySQL&version=1.3.1
#tool nuget:?package=Chet.QuartzNet.EFCore.MySQL&version=1.3.1
Chet.QuartzNet.UI 可视化作业调度管理系统
Chet.QuartzNet.UI 是一个基于 .NET 8.0 和 VbenAdmin 框架开发的可视化作业调度管理系统,提供了完整的任务调度管理功能,支持文件存储和数据库存储两种模式。该组件库旨在简化 Quartz.Net 的使用门槛,提供直观、易用的可视化管理界面,使开发人员能够轻松地创建、管理、监控和调试定时作业,无需深入了解 Quartz.Net 的复杂 API。
通过 Chet.QuartzNet.UI,您可以快速集成任务调度功能到现有项目中,实现作业的可视化配置、实时监控和历史记录查询,大大提高开发效率和运维便利性。
✨ 功能特性
- 🔧 可视化管理 Quartz 作业:通过 Web 界面管理 Quartz 作业、触发器和调度器
- 📊 实时监控:实时查看作业执行状态和日志
- 🎯 ClassJob 模式支持:支持基于类的作业定义,简化作业创建
- ✅ ClassJob 自动注册:自动扫描和注册带有特定特性的作业类
- 💾 多种存储方式:支持文件存储和数据库存储(MySQL、PostgreSQL、SQL Server、SQLite)
- 🔐 认证保护:提供 JWT 认证保护管理界面
- 📦 RCL 打包:使用 Razor Class Library 打包,无侵入集成
- 🚀 快速集成:简单配置即可集成到现有项目
- 🎨 现代化 UI:基于 VbenAdmin 框架,界面美观易用
- 📱 响应式设计:支持移动端访问
- 📝 作业执行历史:记录作业执行历史和结果
- 📜 通知历史管理:完整的通知发送历史记录
- 🔔 PushPlus 通知集成:支持多种渠道的通知推送(微信、企业微信、钉钉、邮件等)
- 📋 通知模板支持:支持 HTML、Markdown、纯文本三种通知模板
- 🎛️ 灵活的通知策略:可配置作业成功/失败、调度器异常时的通知规则
📦 安装
NuGet 安装
根据需要选择安装的包:
# 主包(包含核心功能和文件存储)
dotnet add package Chet.QuartzNet.UI
# 如果需要数据库存储支持(核心包)
# 数据库扩展包(根据需要选择其中一个)
dotnet add package Chet.QuartzNet.EFCore.MySql # MySQL 支持
dotnet add package Chet.QuartzNet.EFCore.PostgreSql # PostgreSQL 支持
dotnet add package Chet.QuartzNet.EFCore.SqlServer # SQL Server 支持
dotnet add package Chet.QuartzNet.EFCore.SQLite # SQLite 支持
依赖要求
- .NET 8.0
- ASP.NET Core 8.0+
- Quartz.NET 3.8.1+ - 作业调度核心库
- Entity Framework Core 8.0+(可选,用于数据库存储)
🚀 快速开始
1. 存储模式选择
系统支持两种存储模式:文件存储和数据库存储,均可通过同一套 API 进行配置和使用。
1.1 文件存储模式(轻量级应用)
文件存储模式适合轻量级应用,无需数据库,配置简单:
// Program.cs
// 添加 Quartz UI 服务(文件存储模式)
builder.Services.AddQuartzUI(builder.Configuration);
// 可选:ClassJob 自动扫描注册
builder.Services.AddQuartzClassJobs();
// 启用中间件
app.UseQuartz();
配置说明:
- 文件存储模式无需额外配置,系统会自动使用文件存储
- 自动读取
QuartzUI节中的 JWT 认证配置 - 作业数据存储在应用目录下的 JSON 文件中
1.2 数据库存储模式(中大型应用)
数据库存储模式适合中大型应用,支持 MySQL、PostgreSQL、SQL Server 和 SQLite:
// Program.cs
// 添加 Quartz UI 服务(数据库存储模式)
builder.Services.AddQuartzUI(builder.Configuration);
// 可选:ClassJob 自动扫描注册
builder.Services.AddQuartzClassJobs();
// 启用中间件
app.UseQuartz();
配置说明:
需要在 appsettings.json 中添加以下配置:
{
"ConnectionStrings": {
"QuartzUI": "server=localhost;database=quartz_db;User Id=root;PWD=password;" // 数据库连接字符串
},
"QuartzUI": {
"StorageType": "Database", // 指定使用数据库存储
"DatabaseProvider": "mysql" // 可选,数据库提供者:mysql、postgresql、sqlserver、sqlite(默认自动判断)
// 其他配置...
}
}
数据库支持:
- ✅ MySQL
- ✅ PostgreSQL
- ✅ SQL Server
- ✅ SQLite
2. 统一 API 设计
无论选择哪种存储模式,API 调用方式完全一致,实现了配置驱动的存储选择:
// 同一套 API,自动根据配置选择存储方式
builder.Services.AddQuartzUI(builder.Configuration);
app.UseQuartz();
核心优势:
- 无需修改代码,仅需调整配置即可切换存储模式
- 统一的 API 设计,降低学习成本
- 便于应用从文件存储升级到数据库存储
- 自动根据连接字符串判断数据库类型
3. JWT 认证配置
两种存储模式均支持 JWT 认证,配置方式一致:
{
"QuartzUI": {
"JwtSecret": "your-secret-key",
"JwtExpiresInMinutes": 30,
"JwtIssuer": "Chet.QuartzNet.UI",
"JwtAudience": "Chet.QuartzNet.UI",
"UserName": "Admin",
"Password": "123456"
}
}
认证配置会自动被 AddQuartzUI 方法读取,无需额外代码。
3. 访问管理界面
启动应用后,访问 /quartz-ui 即可进入管理界面。
📋 使用示例
创建 ClassJob
使用 [QuartzJob] 特性定义作业类:
using Chet.QuartzNet.Core.Attributes;
using Quartz;
[QuartzJob("SampleJob", "DEFAULT", "0 0/5 * * * ?", Description = "示例作业,每5分钟执行一次")]
public class SampleJob : IJob
{
private readonly ILogger<SampleJob> _logger;
public SampleJob(ILogger<SampleJob> logger)
{
_logger = logger;
}
public async Task Execute(IJobExecutionContext context)
{
_logger.LogInformation("SampleJob开始执行,执行时间: {ExecuteTime}", DateTime.Now);
try
{
// 业务逻辑处理
await Task.Delay(1000);
_logger.LogInformation("SampleJob执行完成");
}
catch (Exception ex)
{
_logger.LogError(ex, "SampleJob执行失败");
throw;
}
}
}
注册 ClassJob
// 自动扫描并注册所有标记了 QuartzJob 特性的类
builder.Services.AddQuartzClassJobs();
认证配置
启用 JWT 认证:
// 添加 Quartz UI 服务(自动读取 JWT 配置)
builder.Services.AddQuartzUI(builder.Configuration);
// 在 appsettings.json 中配置 JWT 相关选项
"QuartzUI": {
"UserName": "admin",
"Password": "password",
"JwtSecret": "your-secret-key-change-this-in-production",
"JwtExpiresInMinutes": 30,
"JwtIssuer": "Chet",
"JwtAudience": "Chet.QuartzNet.UI"
}
// 启用中间件
app.UseQuartz();
🎯 界面功能
分析页
- 📊 作业统计概览:总作业数、启用/禁用作业数、正在执行作业数、成功/失败执行次数
- 📈 作业状态分布:各状态作业数量和百分比的饼图展示
- 📋 作业类型分布:各类型作业数量和百分比的饼图展示
- 📉 作业执行趋势:作业执行趋势的折线图展示
- ⏱️ 作业执行耗时:作业执行耗时的柱状图展示
作业管理
- 📋 作业列表展示(支持分页、搜索、筛选)
- ➕ 添加新作业(支持Cron表达式验证)
- ✏️ 编辑现有作业
- 🔄 触发作业(立即执行)
- ⏸️ 暂停/恢复作业
- 🗑️ 删除作业
- 📊 查看作业状态(正常、暂停、完成、错误、阻塞)
- 📝 查看作业执行历史记录
日志管理
- 📜 查看作业执行历史
- 🔍 按状态筛选日志(运行中、成功、失败)
- ⏱️ 查看执行耗时
- ❌ 查看错误信息
- 📋 分页显示日志记录
通知管理
- 🔔 通知配置:配置 PushPlus Token、推送渠道、消息模板等
- 🎛️ 通知策略:设置作业成功/失败、调度器异常时的通知规则
- 📋 通知历史:查看所有通知发送记录
- 🔍 通知筛选:按状态、触发来源筛选通知
- 🗑️ 通知清理:删除单条或批量清空通知记录
- 📤 测试通知:发送测试通知验证配置是否正确
调度器状态
- 🟢 实时显示调度器运行状态
- 📈 自动刷新状态信息
- 📊 显示当前活跃作业数量
作业类型支持
- 🎯 DLL 模式:基于类的作业定义
- ⚙️ API 模式:基于 API 调用的作业定义
🔧 配置选项
数据库配置
系统支持通过不同的扩展包来支持多种数据库。您需要根据实际使用的数据库安装对应的扩展包:
| 数据库类型 | 扩展包名称 | 安装命令 |
|---|---|---|
| MySQL | Chet.QuartzNet.EFCore.MySql | Install-Package Chet.QuartzNet.EFCore.MySql 或 dotnet add package Chet.QuartzNet.EFCore.MySql |
| PostgreSQL | Chet.QuartzNet.EFCore.PostgreSQL | Install-Package Chet.QuartzNet.EFCore.PostgreSQL 或 dotnet add package Chet.QuartzNet.EFCore.PostgreSQL |
| SQL Server | Chet.QuartzNet.EFCore.SqlServer | Install-Package Chet.QuartzNet.EFCore.SqlServer 或 dotnet add package Chet.QuartzNet.EFCore.SqlServer |
| SQLite | Chet.QuartzNet.EFCore.SQLite | Install-Package Chet.QuartzNet.EFCore.SQLite 或 dotnet add package Chet.QuartzNet.EFCore.SQLite |
配置示例:
// 以 MySQL 为例,其他数据库类似
// 安装包后,在 appsettings.json 中配置连接字符串和存储类型
builder.Services.AddQuartzUI(builder.Configuration);
授权配置
{
"QuartzUI": {
"UserName": "自定义用户名",
"Password": "自定义密码",
"JwtSecret": "your-secret-key-change-this-in-production",
"JwtExpiresInMinutes": 30,
"JwtIssuer": "Chet",
"JwtAudience": "Chet.QuartzNet.UI"
}
}
更新说明
[1.3.0] - 2025-12-17
修复
-- 修复使用数据库存储方式时Nuget包源的问题
兼容性
- 与现有版本完全兼容
- 无需数据库迁移或配置更改
[1.2.4] - 2025-12-16
优化
- 更换Logo
- 打包时添加README.md文件
兼容性
- 与现有版本完全兼容
- 无需数据库迁移或配置更改
[1.1.4] - 2025-12-14
修复
- 修复使用数据库存储方式时迁移失败的问题
优化
- 操作时添加提醒
兼容性
- 与现有版本完全兼容
- 无需数据库迁移或配置更改
📝 许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
🆘 支持与联系
如有问题或建议,请通过以下方式联系:
- 提交 Issue
- 发送邮件
- 参与讨论
🙏 致谢
- Quartz.Net - 优秀的任务调度框架
- VbenAdmin - 美观的UI组件库
- .NET - 强大的开发平台
⭐ 如果这个项目对您有帮助,请给个 Star 支持一下!
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net8.0
- Microsoft.EntityFrameworkCore.Design (>= 8.0.0)
- Microsoft.EntityFrameworkCore.Tools (>= 8.0.0)
- Pomelo.EntityFrameworkCore.MySql (>= 8.0.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
修复安装数据库包后找不到扩展服务的问题