🦉 想只有困难,做才有答案 | .NET 框架 Furion v4.9.2.14

来源: 投稿
作者: 百小僧
2024-04-10 15:59:00

董宇辉说:” 行就是知,知就是行。想,只有困难;做,才有答案。“

其实多数时候,我们想得太多了,实际去做的太少了。就好像写这个内容时想的是个中长篇,可真正话到手上只有寥寥数语。

做事何尝不是如此,光有 idea 是不值钱的!

时间能改变许多人和事,同样也能冲淡许多记忆,但更能证明许多人与事的价值。

追溯 Furion 的诞生之初,借助 Gitee 的看板功能,将每一个任务都细致入微地规划好,并逐一将其化为现实。那时的我,心中并无太多纷扰与顾虑,只是怀揣着对技术的热爱与追求,全身心投入到完善框架功能的征途上。然而,命运的轮盘总是如此神奇,未曾料到,Furion 框架已如雨后春笋般蓬勃发展,其影响力与日俱增,正逐步迈向更广阔的未来。

只是,物非人非,今昔何异,心随境转梦难寻。

2020 年,Furion 第一个版本

2024年,Furion 第四个版本


本期亮点

1. 添加定时任务批量设置作业组名称 GroupSet

默认情况下,若需为单个或多个作业批量设置 GroupName,以往需采用以下的方式,这在代码层面显得较为冗长

services.AddSchedule(options =>
{
     // 为 group1 添加作业,并手动设置该作业组名称
-    options.AddJob(JobBuilder.Create<MyJob>().SetGroupName("group1"), Triggers.Secondly());
-    options.AddJob(JobBuilder.Create<MyJob>().SetGroupName("group1"), Triggers.Hourly());

     // 为 group2 添加作业,并手动设置该作业组名称
-    options.AddJob(JobBuilder.Create<MyJob>().SetGroupName("group2"), Triggers.Secondly());
-    options.AddJob(JobBuilder.Create<MyJob>().SetGroupName("group2"), Triggers.Hourly());

     // 添加未设置作业组名称的作业
     options.AddJob<MyJob>(Triggers.Secondly());
});

在最新版本中,我们提供了更为简洁的方式来实现:

services.AddSchedule(options =>
{
     // 为 group1 添加作业,并自动应用该作业组名称
+    options.GroupSet("group1", () => 
+    {
+        options.AddJob<MyJob>(Triggers.Secondly());
+        options.AddJob<MyJob>(Triggers.Hourly());
+    });
    
     // 为 group2 添加作业,并自动应用该作业组名称
+    options.GroupSet("group2", () => 
+    {
+        options.AddJob<MyJob>(Triggers.Secondly());
+        options.AddJob<MyJob>(Triggers.Hourly());
+    });

     // 添加未设置作业组名称的作业
     options.AddJob<MyJob>(Triggers.Secondly());
});

通过options.GroupSet方法,我们能够为指定作业组添加多个作业,且这些作业会自动应用该组的名称,大大简化了代码书写过程。同时,未在此方法内添加的作业将默认不设置作业组名称。这样的设计既提升了代码的可读性,也方便了作业组的管理与配置。

2. 完善模块化加载插件程序集底层引擎

以往,模块化加载拓展程序集 dll 文件的方式仅限于指定完整的 .dll 路径,缺乏目录扫描的支持,这在需要频繁添加多个 .dll 文件的场景下,无疑增加了操作的复杂性,显得尤为繁琐。

{
  "AppSettings": {
     // 需要把 plugins 一个个 dll 添加上来
-    "ExternalAssemblies": ["plugins/Module1.dll", "plugins/Module2.dll", ...]
  }
}

现在,新版本已经引入了目录配置功能,实现了自动扫描指定目录下的 .dll 文件,大大简化了操作过程,提升了效率。

{
  "AppSettings": {
+    "ExternalAssemblies": ["plugins"]    // 只需要提供 plugins 目录即可(同样支持上面的方式)
  }
}

输入图片说明

3. 重写粘土对象底层引擎,提供更加灵活、智能的类 JavaScript 对象操作方式

最近我们发布了三个关于粘土对象 Clay 的版本,这主要是因为一位 VIP 用户的系统需求中涉及到了动态构建对象的复杂操作。

我们非常感激这位用户,正是他业务的高复杂度,使我们发现了粘土对象在灵活性、智能性以及隐藏 Bug 方面存在的问题。这些反馈促使我们对粘土对象模块进行了深入优化和提升。

我们之所以在短时间内发布了多个版本,正是为了快速响应并满足他反复提出的需求和问题,确保系统的稳定性和性能得到进一步提升。

输入图片说明


输入图片说明

本期更新

更新日志:http://furion.baiqian.ltd/docs/upgrade/

  • 新特性

    • [新增] 定时任务批量设置作业组名称 .GroupSet 方法 4.9.2.9 ⏱️2024.04.09 9e08278
    • [新增] 控制器/动态 WebAPI 方法添加 [DisplayName] 特性生成 Swagger 文档注释 4.9.2.3 ⏱️2024.03.30 0f24c66
    • [新增] 远程请求且出现异常时输出重试日志 4.9.2.1 ⏱️2024.03.29 e4549eb
    • [新增] 定时任务启动时检查不合法的作业触发器配置并打印警告日志 4.9.2 ⏱️2024.03.28 3190f4c
  • 问题修复

    • [修复] 定时任务生成 PostgreSQL 数据库 SQL 语句的字段名缺少 " 双引号 4.9.2.13 ⏱️2024.04.10 #I9FD9Y
    • [修复] 定时任务使用 JobBuilder 构建委托作业永远无法执行问题 4.9.2.10 ⏱️2024.04.10 Sundial#I7KU7K
    • [修复] 规范化结果在未启用 401/403 等状态码中间件时进行了错误拦截 4.9.2.8 ⏱️2024.04.08 b135e8c
    • [修复] 客户端设置 JWT Token 时如果 Bearer 后面跟多个空格导致验证失败问题 4.9.2.8 ⏱️2024.04.08 @xuejf168 !874
    • [修复] SQL 查询结果转模型不支持 DateOnlyTimeOnly 属性类型 4.9.2.7 ⏱️2024.04.04 31f9d23
    • [修复] 粘土对象调整原先类型并设置混合类型异常问题 4.9.2.6 ⏱️2024.04.03 83b216f
    • [修复] 粘土对象将 Object 类型设置给 Array 类型出现递归死循环问题 4.9.2.5 ⏱️2024.04.03 1126c74
    • [修复] 粘土对象不支持嵌套粘土对象问题 4.9.2.4 ⏱️2024.04.02 fcb1223
    • [修复] 粘土对象序列化后出现二次序列化成字符串问题 4.9.2.4 ⏱️2024.04.02 fcb1223
    • [修复] 在 .NET8 之后修改 System.Text.Json 默认序列化选项引发 This JsonSerializerOptions instance is read-only or has already been used in serialization or deserialization. 异常问题 4.9.2.2 ⏱️2024.03.29 9f44653
    • [修复] 远程请求 IHttpDispatchProxy 模式配置重试策略无效 4.9.2.1 ⏱️2024.03.29 #I9CK7X
  • 其他更改

    • [调整] 默认 System.Text.Json 序列化提供器选项为不区分大小写匹配 4.9.2.1 ⏱️2024.03.29 b58e7be
  • 文档

    • [更新] 事件总线文档、定时任务文档、规范化接口文档、远程请求文档、粘土对象文档、FS 静态类文档、序列化文档
  • 贡献者


展开阅读全文
点击加入讨论🔥(3) 发布并加入讨论🔥
本篇精彩评论
3 评论
3 收藏
分享
返回顶部
顶部