多Key切换项目二
前言
好久没更新博客了,最近一段时间休整了一下。
本周进度
我们将约束接口IMultipleKeyEntity
改为基类MultipleKeyEntity
并加入了统一的属性来规范默认库和SQLServer的实体类型,并加入了可以开始使用日期和结束使用日期,来对非当前可使用日期的数据进行排除,这样可以保留历史记录.
加入生命周期LifeCycle
支持非循环key和日、月、年的循环key来满足业务需要,通过BackgroundService
来做了个定时任务,目前还没有加入慕等所以只能设置为24小时循环一次.
return Task.Delay(86400000, stoppingToken).ContinueWith(
t =>
{
using var scope = _serviceProvider.CreateScope();
var multipleKeysProvider = scope.ServiceProvider.GetService<IMultipleKeysProvider<MultipleKeyEntity>>();
multipleKeysProvider?.TimingUpdateMultipleKeys();
ExecuteAsync(stoppingToken);
}, stoppingToken);
SQLServer这里添加数据的时候有一个重复操作,应该会在下一次更新中完善实体得到解决
// todo
var data = (MultipleKeyEntity)value.Data.Clone();
data.UpdateLifeCycle(DateTime.Today.AddDays(1), value.LifeCycle);
var info = new SqlServerMultipleKeyInfo(data.LifeCycle,data.Maximum)
{
KeyName = data.GetType().Name,
Data = data,
};
info.UpdateLifeCycle(DateTime.Today.AddDays(1), value.LifeCycle);
_context.MultipleKeyInfo.Add(info);
另外打包后的项目生成的迁移文件需要指定程序集名称这里使用要注意.
builder.Services.AddDbContext<SqlServerMultipleKeyContext>(o => o.UseSqlServer(
@"Server=(localdb)\mssqllocaldb;Database=SwitchingMultipleKeys;Trusted_Connection=True",
b => b.MigrationsAssembly("Test_MultipleKets")
));
下一步的计划是先简单修复下问题,然后开始着手UI部分,然后加入Redis版本来增强库的使用。
仓库在下面大家可以看看https://github.com/MrChuJiu/SwitchingMultipleKeys
结语
然后就是这个文章的目的,因为这个项目思路上比较清晰,而且项目解决的问题又是常见问题,所以这里主要想和各位道友一起做,
有想加入的朋友可以直接 pull 下来,然后提pr、issues然后一起来做, 需要我帮助的朋友也可以群里直接联系我。
当然目前感觉并不会有多少人真的参与进来,不过项目确实是个好项目,希望能给参与到的人简历加上一分。
另外我会根据这个标题更新项目进度和参与人,希望大家持续关注