Chet.QuartzNet.UI 1.2.4

There is a newer version of this package available.
See the version list below for details.
dotnet add package Chet.QuartzNet.UI --version 1.2.4
                    
NuGet\Install-Package Chet.QuartzNet.UI -Version 1.2.4
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Chet.QuartzNet.UI" Version="1.2.4" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Chet.QuartzNet.UI" Version="1.2.4" />
                    
Directory.Packages.props
<PackageReference Include="Chet.QuartzNet.UI" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Chet.QuartzNet.UI --version 1.2.4
                    
#r "nuget: Chet.QuartzNet.UI, 1.2.4"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Chet.QuartzNet.UI@1.2.4
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Chet.QuartzNet.UI&version=1.2.4
                    
Install as a Cake Addin
#tool nuget:?package=Chet.QuartzNet.UI&version=1.2.4
                    
Install as a Cake Tool

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)
  • 🔔 PushPlus 通知集成:支持多种渠道的通知推送(微信、企业微信、钉钉、邮件等)
  • 📋 通知模板支持:支持 HTML、Markdown、纯文本三种通知模板
  • 🎛️ 灵活的通知策略:可配置作业成功/失败、调度器异常时的通知规则
  • 📜 通知历史管理:完整的通知发送历史记录
  • 🔐 认证保护:提供 JWT 认证保护管理界面
  • 📦 RCL 打包:使用 Razor Class Library 打包,无侵入集成
  • 🚀 快速集成:简单配置即可集成到现有项目
  • 🎨 现代化 UI:基于 VbenAdmin 框架,界面美观易用
  • 📱 响应式设计:支持移动端访问
  • 📝 作业执行历史:记录作业执行历史和结果
  • 🎯 数据同步功能:支持数据同步作业示例
  • ⏱️ 灵活的时间调度:支持 Cron 表达式和多种触发器类型

📦 安装

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.MySqldotnet add package Chet.QuartzNet.EFCore.MySql
PostgreSQL Chet.QuartzNet.EFCore.PostgreSQL Install-Package Chet.QuartzNet.EFCore.PostgreSQLdotnet add package Chet.QuartzNet.EFCore.PostgreSQL
SQL Server Chet.QuartzNet.EFCore.SqlServer Install-Package Chet.QuartzNet.EFCore.SqlServerdotnet add package Chet.QuartzNet.EFCore.SqlServer
SQLite Chet.QuartzNet.EFCore.SQLite Install-Package Chet.QuartzNet.EFCore.SQLitedotnet 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"
  }
}

📁 项目结构

Chet.QuartzNet.UI/
├── src/
│   ├── Chet.QuartzNet.EFCore/                # EF Core 数据访问层核心
│   │   ├── Data/                           # 数据库上下文
│   │   ├── Extensions/                      # 扩展方法
│   │   └── Services/                        # 数据库存储服务
│   ├── Chet.QuartzNet.EFCore.MySql/          # MySQL 数据库支持
│   ├── Chet.QuartzNet.EFCore.PostgreSql/     # PostgreSQL 数据库支持
│   ├── Chet.QuartzNet.EFCore.SQLite/         # SQLite 数据库支持
│   ├── Chet.QuartzNet.EFCore.SqlServer/     # SQL Server 数据库支持
│   ├── Chet.QuartzNet.Models/               # 数据模型和 DTO
│   │   ├── DTOs/                            # 数据传输对象
│   │   └── Entities/                         # 实体类
│   ├── Chet.QuartzNet.UI/                   # UI 组件和控制器
│   │   ├── Controllers/                     # API 控制器
│   │   ├── Extensions/                      # 扩展方法
│   │   ├── Middleware/                      # 中间件
│   │   └── wwwroot/                         # 静态资源
│   └── Chet.QuartzNet.Web/                  # Web 应用示例
├── examples/
│   ├── Chet.QuartzNet.Database.Example/      # 数据库存储示例项目
│   └── Chet.QuartzNet.File.Example/          # 文件存储示例项目
├── README.md                                # 项目根目录文档
├── LICENSE                                  # 许可证文件
└── Chet.QuartzNet.UI.sln                    # 解决方案文件

更新说明

[1.1.5] - 2025-12-16

优化
  • 更换Logo
  • 打包时添加README.md文件
兼容性
  • 与现有版本完全兼容
  • 无需数据库迁移或配置更改

[1.1.4] - 2025-12-14

修复
  • 修复使用数据库存储方式时迁移失败的问题
优化
  • 操作时添加提醒
兼容性
  • 与现有版本完全兼容
  • 无需数据库迁移或配置更改

🤝 贡献指南

欢迎提交 Issue 和 Pull Request!

  1. Fork 项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开 Pull Request

📝 许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

🆘 支持与联系

如有问题或建议,请通过以下方式联系:

  • 提交 Issue
  • 发送邮件
  • 参与讨论

🙏 致谢


⭐ 如果这个项目对您有帮助,请给个 Star 支持一下!

Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
2.2.0 95 5/29/2026
2.1.1 156 1/29/2026
2.1.0 134 1/16/2026
2.0.0 117 1/15/2026
1.6.1 123 1/12/2026
1.6.0 121 12/30/2025
1.5.0 128 12/27/2025
1.4.1 194 12/25/2025
1.3.2 194 12/24/2025
1.3.1 292 12/18/2025
1.3.0 293 12/17/2025
1.2.4 303 12/16/2025
1.1.4 169 12/14/2025
Loading failed

更新Logo