feat(新增): 执行动态任务不在

This commit is contained in:
Bunny 2024-08-15 22:55:32 +08:00
parent 55e3509d1f
commit 4f429d09a4
9 changed files with 134 additions and 83 deletions

View File

@ -17,7 +17,7 @@ public class JobService : IJobService
// var scheduler = schedulerFactory.GetScheduler();
var scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult();
var jobDetail = JobBuilder.Create<SimJob>()
var jobDetail = JobBuilder.Create<SimpleJob>()
.UsingJobData("username", "用户名")
.UsingJobData("password", "密码")
.WithIdentity("simpleJob", "简单的JOB")
@ -46,7 +46,7 @@ public class JobService : IJobService
var stdSchedulerFactory = new StdSchedulerFactory();
var scheduler = stdSchedulerFactory.GetScheduler().GetAwaiter().GetResult();
var jobDetail = JobBuilder.Create<SimJob>()
var jobDetail = JobBuilder.Create<SimpleJob>()
.UsingJobData("username", "用户名")
.UsingJobData("password", "密码")
// TODO 如果不设置持久的会报错;
@ -81,7 +81,7 @@ public class JobService : IJobService
var stdSchedulerFactory = new StdSchedulerFactory();
var scheduler = stdSchedulerFactory.GetScheduler().GetAwaiter().GetResult();
var jobDetail = JobBuilder.Create<SimJob>()
var jobDetail = JobBuilder.Create<SimpleJob>()
.UsingJobData("username", "用户名")
.UsingJobData("password", "密码")
.StoreDurably() // 设置作业为持久的

View File

@ -0,0 +1,34 @@
using Microsoft.AspNetCore.Builder;
using Quartz;
using Quartz.Impl;
namespace Bunny.Service.Job.JobService;
public static class CronJobService
{
public static void AddCronJobService(this WebApplicationBuilder builder)
{
var stdSchedulerFactory = new StdSchedulerFactory();
var scheduler = stdSchedulerFactory.GetScheduler().GetAwaiter().GetResult();
var jobDetail = JobBuilder.Create<SimpleJob>()
.UsingJobData("username", "用户名")
.UsingJobData("password", "密码")
.StoreDurably() // 设置作业为持久的
.WithIdentity("simpleJob", "简单的JOB")
.Build();
scheduler.AddJob(jobDetail, true).GetAwaiter().GetResult();
var trigger = TriggerBuilder.Create()
.ForJob(jobDetail)
.UsingJobData("trigger", "trigger值")
.WithIdentity("testTrigger", "测试发出器")
.StartNow()
.WithCronSchedule("0/1 * * * * ?")
.Build();
scheduler.ScheduleJob(trigger).GetAwaiter().GetResult();
scheduler.Start().GetAwaiter().GetResult();
}
}

View File

@ -0,0 +1,36 @@
using Microsoft.AspNetCore.Builder;
using Quartz;
using Quartz.Impl;
namespace Bunny.Service.Job.JobService;
public static class SimpleJobService
{
public static void AddCreateSimpleJobService(this WebApplicationBuilder builder)
{
var schedulerFactory = new StdSchedulerFactory();
// TODO 如果使用异步必须使用await 和 async
// var scheduler = schedulerFactory.GetScheduler();
var scheduler = schedulerFactory.GetScheduler().GetAwaiter().GetResult();
var jobDetail = JobBuilder.Create<SimpleJob>()
.UsingJobData("username", "用户名")
.UsingJobData("password", "密码")
.WithIdentity("simpleJob", "简单的JOB")
.Build();
var trigger = TriggerBuilder.Create()
.WithIdentity("testTrigger", "测试发出器")
.StartNow()
// 每隔5秒执行一次一共重复10次
.WithSimpleSchedule(x => x.WithIntervalInSeconds(1).WithRepeatCount(10))
.Build();
// 使用同步方法
scheduler.ScheduleJob(jobDetail, trigger).GetAwaiter().GetResult();
scheduler.Start().GetAwaiter().GetResult();
// TODO 使用异步
// await _scheduler.ScheduleJob(jobDetail, trigger);
// await _scheduler.Start();
}
}

View File

@ -2,7 +2,7 @@
namespace Bunny.Service.Job;
public class SimJob : IJob
public class SimpleJob : IJob
{
public Task Execute(IJobExecutionContext context)
{

View File

@ -11,40 +11,22 @@ public class BaseConfig(WebApplicationBuilder builder)
/// </summary>
public void Initialize()
{
// 注入服务依赖、Host服务、插件等
AddApplicationService();
// 使用扩展第三方如Redis、Minio、SQLSugar
UseExtend();
// 配置跨域
UseCors();
}
/// <summary>
/// 注入控制器、服务依赖、Host服务等
/// </summary>
private void AddApplicationService()
{
// 配置日志相关
// builder.Logging.AddLog4Net("Config/log4net.config");
// 添加Service服务
builder.AddApplicationServices();
// 添加后台服务
builder.AddApplicationBackendServices();
// 添加使用自定义配置文件
builder.Services.AddSingleton(new AppSettings(builder.Configuration));
// 添加 SignalR
builder.Services.AddSignalR();
// 添加Service服务
builder.AddApplicationServices();
// 添加后台服务
builder.AddApplicationBackendServices();
// 添加验证码
builder.AddCaptcha();
}
/// <summary>
/// 扩展服务
/// </summary>
private void UseExtend()
{
// 设置过滤器
builder.FilterConfigInitialize();
builder.AddFilterConfigInitialize();
// 初始化Redis
builder.AddRedisContext();
// 初始化Minio

View File

@ -1,21 +0,0 @@
using Bunny.Common.Filter;
using Bunny.Service.Filter;
namespace Bunny.WebApi.Config;
public static class FilterConfig
{
/// <summary>
/// 配置过滤器
/// </summary>
/// <param name="builder"></param>
public static void FilterConfigInitialize(this WebApplicationBuilder builder)
{
// 添加自定义过滤器---全局异常捕获
builder.Services.AddControllers(option =>
{
option.Filters.Add<GlobalExceptionFilter>();
option.Filters.Add<AuthorizationFilter>();
});
}
}

View File

@ -1,34 +0,0 @@
using Lazy.Captcha.Core;
using Lazy.Captcha.Core.Generator;
using SkiaSharp;
namespace Bunny.WebApi.Config;
public static class PluginConfig
{
public static void AddCaptcha(this WebApplicationBuilder builder)
{
var service = builder.Services;
// 使用图形验证码
service.AddDistributedMemoryCache();
// 验证码相关配置内容
service.AddCaptcha(options =>
{
options.CaptchaType = CaptchaType.DEFAULT; // 验证码类型
options.CodeLength = 4; // 验证码长度
options.ExpirySeconds = 60; // 过期时间(单位/秒)
options.IgnoreCase = true; // 比较忽略大小写
options.ImageOption.Animation = true; // 是否启用动画
options.ImageOption.Width = 130; // 验证码宽度
options.ImageOption.Height = 48; // 验证码高度
options.ImageOption.BackgroundColor = SKColors.White;
options.ImageOption.BubbleCount = 6; // 气泡数量
options.ImageOption.BubbleMinRadius = 2; // 气泡最小半径
options.ImageOption.BubbleMaxRadius = 6; // 气泡最大半径
options.ImageOption.BubbleThickness = 2; // 气泡边沿厚度
options.ImageOption.InterferenceLineCount = 2; // 干扰线数量
options.ImageOption.FontSize = 36; // 字体大小
options.ImageOption.FontFamily = DefaultFontFamilys.Instance.Kaiti; // 字体中文使用kaiti其他字符可根据喜好设置
});
}
}

View File

@ -1,6 +1,12 @@
using Bunny.Common.Connect;
using Bunny.Common.Filter;
using Bunny.Service.Filter;
using Bunny.Service.IService;
using Bunny.Service.IService.Service;
using Bunny.Service.Job.JobService;
using Lazy.Captcha.Core;
using Lazy.Captcha.Core.Generator;
using SkiaSharp;
namespace Bunny.WebApi.Config;
@ -20,11 +26,59 @@ public static class ServiceRegistration
/// <summary>
/// 注入后台服务相关
/// 用于添加所以Job服务之后在BaseConfig中进行调用
/// </summary>
/// <param name="builder"></param>
public static void AddApplicationBackendServices(this WebApplicationBuilder builder)
{
// 测试注入后台服务
// builder.Services.AddHostedService<TemplateBackgroundModule>();
// builder.Services.AddHostedService<TemplateBackgroundModule>().Clear();
// https://github.com/quartznet/quartznet/tree/main/database/tables
// builder.AddCreateSimpleJobService();
builder.AddCronJobService();
}
/// <summary>
/// 配置过滤器
/// </summary>
/// <param name="builder"></param>
public static void AddFilterConfigInitialize(this WebApplicationBuilder builder)
{
// 添加自定义过滤器---全局异常捕获
builder.Services.AddControllers(option =>
{
option.Filters.Add<GlobalExceptionFilter>();
option.Filters.Add<AuthorizationFilter>();
});
}
/// <summary>
/// 添加验证码配置内容
/// </summary>
/// <param name="builder"></param>
public static void AddCaptcha(this WebApplicationBuilder builder)
{
var service = builder.Services;
// 使用图形验证码
service.AddDistributedMemoryCache();
// 验证码相关配置内容
service.AddCaptcha(options =>
{
options.CaptchaType = CaptchaType.DEFAULT; // 验证码类型
options.CodeLength = 4; // 验证码长度
options.ExpirySeconds = 60; // 过期时间(单位/秒)
options.IgnoreCase = true; // 比较忽略大小写
options.ImageOption.Animation = true; // 是否启用动画
options.ImageOption.Width = 130; // 验证码宽度
options.ImageOption.Height = 48; // 验证码高度
options.ImageOption.BackgroundColor = SKColors.White;
options.ImageOption.BubbleCount = 6; // 气泡数量
options.ImageOption.BubbleMinRadius = 2; // 气泡最小半径
options.ImageOption.BubbleMaxRadius = 6; // 气泡最大半径
options.ImageOption.BubbleThickness = 2; // 气泡边沿厚度
options.ImageOption.InterferenceLineCount = 2; // 干扰线数量
options.ImageOption.FontSize = 36; // 字体大小
options.ImageOption.FontFamily = DefaultFontFamilys.Instance.Kaiti; // 字体中文使用kaiti其他字符可根据喜好设置
});
}
}

BIN
Bunny.WebApi/bunny.db Normal file

Binary file not shown.