From c1e1042e1ac9fa04f6b74f7e82458040e6b659a1 Mon Sep 17 00:00:00 2001 From: xuejiaming <326308290@qq.com> Date: Fri, 29 Oct 2021 10:44:48 +0800 Subject: [PATCH] =?UTF-8?q?[#47]=E6=94=AF=E6=8C=81=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E5=88=86=E8=A1=A8=E5=88=86=E5=BA=93=E6=97=A0?= =?UTF-8?q?=E9=9C=80=E9=80=9A=E8=BF=87=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- samples/Sample.BulkConsole/Program.cs | 1 + .../DefaultDesignTimeDbContextFactory.cs | 1 + samples/Sample.Migrations/Startup.cs | 1 + samples/Sample.MySql/DIExtension.cs | 1 + samples/Sample.SqlServer/DIExtension.cs | 1 + .../Domain/Entities/SysUserMod.cs | 2 +- samples/Sample.SqlServer3x/Startup.cs | 1 + .../DIExtension.cs | 1 + .../DIExtension.cs | 1 + .../Bootstrapers/EntityMetadataInitializer.cs | 37 +- .../IShardingBootstrapper.cs | 5 +- .../ShardingBootstrapper.cs | 17 +- .../Core/EntityMetadatas/EntityMetadata.cs | 6 +- ....cs => EntityMetadataDataSourceBuilder.cs} | 0 .../EntityMetadatas/IEntityMetadataManager.cs | 34 + .../IEntityMetadataManager`1.cs | 27 - .../Abstractions/IDataSourceRouteAssert.cs | 2 +- .../Abstractions/ITableRouteAssert.cs | 2 +- .../Core/ShardingTableKeyAttribute.cs | 4 +- .../VirtualDatabase/ShardingEntityConfig.cs | 64 - .../VirtualDataSources/VirtualDataSource.cs | 4 +- .../VirtualTables/IVirtualTable.cs | 1 + ...actShardingFilterVirtualDataSourceRoute.cs | 2 +- ...tShardingOperatorVirtualDataSourceRoute.cs | 2 +- .../AbstractVirtualDataSourceRoute.cs | 6 +- .../IVirtualDataSourceRoute.cs | 7 +- .../ShardingDataSourceRouteConfig.cs | 6 +- ...AbstractShardingFilterVirtualTableRoute.cs | 2 +- ...stractShardingOperatorVirtualTableRoute.cs | 2 +- .../Abstractions/AbstractVirtualTableRoute.cs | 6 +- .../TableRoutes/IVirtualTableRoute.cs | 3 +- .../RoutingRuleEngine/TableRouteRuleEngine.cs | 2 +- .../TableRoutes/ShardingTableRouteConfig.cs | 6 +- src/ShardingCore/DIExtension.cs | 4 + .../Extensions/DbContextExtension.cs | 2 +- .../ShardingDataSourceRouteExtension.cs | 12 +- .../Extensions/ShardingTableRouteExtension.cs | 12 +- .../Extensions/VirtualDataBaseExtension.cs | 2 +- .../Extensions/VirtualDataSourceExtension.cs | 2 +- .../EntityMetadataHelper.cs | 6 +- src/ShardingCore/Jobs/Abstaractions/IJob.cs | 8 + .../Jobs/Abstaractions/IJobExecutor.cs | 16 + .../Jobs/Abstaractions/IJobFactory.cs | 16 + .../Jobs/Abstaractions/IJobManager.cs | 21 + .../Jobs/Abstaractions/IJobTrigger.cs | 15 + src/ShardingCore/Jobs/Cron/CronExpression.cs | 2093 +++++++++++++++++ src/ShardingCore/Jobs/Cron/ISet.cs | 47 + src/ShardingCore/Jobs/Cron/ISortedSet.cs | 35 + src/ShardingCore/Jobs/Cron/TreeSet.cs | 170 ++ src/ShardingCore/Jobs/DIExtension.cs | 26 + .../Jobs/Extensions/CommonExtension.cs | 28 + .../Jobs/Impls/Attributes/JobRunAttribute.cs | 59 + .../Jobs/Impls/DefaultJobFactory.cs | 36 + .../Jobs/Impls/InMemoryJobManager.cs | 45 + src/ShardingCore/Jobs/Impls/JobEntry.cs | 79 + .../Jobs/Impls/JobGlobalOptions.cs | 16 + src/ShardingCore/Jobs/JobRunnerService.cs | 175 ++ src/ShardingCore/Jobs/JobTypeParser.cs | 71 + src/ShardingCore/Jobs/UtcTime.cs | 25 + ...eRouteShardingDataSourceDiscoverVisitor.cs | 445 ++-- .../TableCreator/IShardingTableCreator.cs | 9 +- .../TableCreator/ShardingTableCreator.cs | 2 +- src/ShardingCore/Utils/ShardingUtil.cs | 32 +- ...hardingTimeKeyDateTimeVirtualTableRoute.cs | 2 +- ...actShardingTimeKeyLongVirtualTableRoute.cs | 2 +- ...ShardingDayKeyDateTimeVirtualTableRoute.cs | 61 +- ...mpleShardingDayKeyLongVirtualTableRoute.cs | 64 +- ...impleShardingModKeyIntVirtualTableRoute.cs | 2 +- ...leShardingModKeyStringVirtualTableRoute.cs | 9 +- ...ardingMonthKeyDateTimeVirtualTableRoute.cs | 64 +- ...leShardingMonthKeyLongVirtualTableRoute.cs | 64 +- ...hardingWeekKeyDateTimeVirtualTableRoute.cs | 58 +- ...pleShardingWeekKeyLongVirtualTableRoute.cs | 59 +- ...hardingYearKeyDateTimeVirtualTableRoute.cs | 59 +- ...pleShardingYearKeyLongVirtualTableRoute.cs | 60 +- .../Domain/Entities/SysUserMod.cs | 2 +- .../Domain/Entities/SysUserRange.cs | 2 +- test/ShardingCore.Test50.MySql/Startup.cs | 1 + .../Domain/Entities/SysUserMod.cs | 5 +- .../Shardings/SysUserModVirtualTableRoute.cs | 6 + test/ShardingCore.Test50/Startup.cs | 1 + .../Domain/Entities/SysUserMod.cs | 2 +- test/ShardingCore.Test50_2x/Startup.cs | 1 + .../Domain/Entities/SysUserMod.cs | 2 +- test/ShardingCore.Test50_3x/Startup.cs | 1 + 86 files changed, 3882 insertions(+), 413 deletions(-) rename src/ShardingCore/{ => Bootstrapers}/IShardingBootstrapper.cs (72%) rename src/ShardingCore/{ => Bootstrapers}/ShardingBootstrapper.cs (70%) rename src/ShardingCore/Core/EntityMetadatas/{IEntityMetadataDataSourceBuilder.cs => EntityMetadataDataSourceBuilder.cs} (100%) create mode 100644 src/ShardingCore/Core/EntityMetadatas/IEntityMetadataManager.cs delete mode 100644 src/ShardingCore/Core/VirtualDatabase/ShardingEntityConfig.cs rename src/ShardingCore/{Utils => Helpers}/EntityMetadataHelper.cs (95%) create mode 100644 src/ShardingCore/Jobs/Abstaractions/IJob.cs create mode 100644 src/ShardingCore/Jobs/Abstaractions/IJobExecutor.cs create mode 100644 src/ShardingCore/Jobs/Abstaractions/IJobFactory.cs create mode 100644 src/ShardingCore/Jobs/Abstaractions/IJobManager.cs create mode 100644 src/ShardingCore/Jobs/Abstaractions/IJobTrigger.cs create mode 100644 src/ShardingCore/Jobs/Cron/CronExpression.cs create mode 100644 src/ShardingCore/Jobs/Cron/ISet.cs create mode 100644 src/ShardingCore/Jobs/Cron/ISortedSet.cs create mode 100644 src/ShardingCore/Jobs/Cron/TreeSet.cs create mode 100644 src/ShardingCore/Jobs/DIExtension.cs create mode 100644 src/ShardingCore/Jobs/Extensions/CommonExtension.cs create mode 100644 src/ShardingCore/Jobs/Impls/Attributes/JobRunAttribute.cs create mode 100644 src/ShardingCore/Jobs/Impls/DefaultJobFactory.cs create mode 100644 src/ShardingCore/Jobs/Impls/InMemoryJobManager.cs create mode 100644 src/ShardingCore/Jobs/Impls/JobEntry.cs create mode 100644 src/ShardingCore/Jobs/Impls/JobGlobalOptions.cs create mode 100644 src/ShardingCore/Jobs/JobRunnerService.cs create mode 100644 src/ShardingCore/Jobs/JobTypeParser.cs create mode 100644 src/ShardingCore/Jobs/UtcTime.cs diff --git a/README.md b/README.md index 084846ae..ea10ad69 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ ---
Gitee Star 助力dotnet 生态 Github Star
+Github Source Code 助力dotnet 生态 Gitee Source Code
+ /// Cron expressions are comprised of 6 required fields and one optional field + /// separated by white space. The fields respectively are described as follows: + ///
+ ///Field Name | + ///+ /// | Allowed Values | + ///+ /// | Allowed Special Characters | + ///
---|---|---|---|---|
Seconds | + ///+ /// | 0-59 | + ///+ /// | , - /// / | + ///
Minutes | + ///+ /// | 0-59 | + ///+ /// | , - /// / | + ///
Hours | + ///+ /// | 0-23 | + ///+ /// | , - /// / | + ///
Day-of-month | + ///+ /// | 1-31 | + ///+ /// | , - /// ? / L W C | + ///
Month | + ///+ /// | 1-12 or JAN-DEC | + ///+ /// | , - /// / | + ///
Day-of-Week | + ///+ /// | 1-7 or SUN-SAT | + ///+ /// | , - /// ? / L # | + ///
Year (Optional) | + ///+ /// | empty, 1970-2099 | + ///+ /// | , - /// / | + ///
+ /// The '*' character is used to specify all values. For example, "*" + /// in the minute field means "every minute". + ///
+ ///+ /// The '?' character is allowed for the day-of-month and day-of-week fields. It + /// is used to specify 'no specific value'. This is useful when you need to + /// specify something in one of the two fields, but not the other. + ///
+ ///+ /// The '-' character is used to specify ranges For example "10-12" in + /// the hour field means "the hours 10, 11 and 12". + ///
+ ///+ /// The ',' character is used to specify additional values. For example + /// "MON,WED,FRI" in the day-of-week field means "the days Monday, + /// Wednesday, and Friday". + ///
+ ///+ /// The '/' character is used to specify increments. For example "0/15" + /// in the seconds field means "the seconds 0, 15, 30, and 45". And + /// "5/15" in the seconds field means "the seconds 5, 20, 35, and + /// 50". Specifying '*' before the '/' is equivalent to specifying 0 is + /// the value to start with. Essentially, for each field in the expression, there + /// is a set of numbers that can be turned on or off. For seconds and minutes, + /// the numbers range from 0 to 59. For hours 0 to 23, for days of the month 0 to + /// 31, and for months 1 to 12. The "/" character simply helps you turn + /// on every "nth" value in the given set. Thus "7/6" in the + /// month field only turns on month "7", it does NOT mean every 6th + /// month, please note that subtlety. + ///
+ ///+ /// The 'L' character is allowed for the day-of-month and day-of-week fields. + /// This character is short-hand for "last", but it has different + /// meaning in each of the two fields. For example, the value "L" in + /// the day-of-month field means "the last day of the month" - day 31 + /// for January, day 28 for February on non-leap years. If used in the + /// day-of-week field by itself, it simply means "7" or + /// "SAT". But if used in the day-of-week field after another value, it + /// means "the last xxx day of the month" - for example "6L" + /// means "the last friday of the month". When using the 'L' option, it + /// is important not to specify lists, or ranges of values, as you'll get + /// confusing results. + ///
+ ///+ /// The 'W' character is allowed for the day-of-month field. This character + /// is used to specify the weekday (Monday-Friday) nearest the given day. As an + /// example, if you were to specify "15W" as the value for the + /// day-of-month field, the meaning is: "the nearest weekday to the 15th of + /// the month". So if the 15th is a Saturday, the trigger will fire on + /// Friday the 14th. If the 15th is a Sunday, the trigger will fire on Monday the + /// 16th. If the 15th is a Tuesday, then it will fire on Tuesday the 15th. + /// However if you specify "1W" as the value for day-of-month, and the + /// 1st is a Saturday, the trigger will fire on Monday the 3rd, as it will not + /// 'jump' over the boundary of a month's days. The 'W' character can only be + /// specified when the day-of-month is a single day, not a range or list of days. + ///
+ ///+ /// The 'L' and 'W' characters can also be combined for the day-of-month + /// expression to yield 'LW', which translates to "last weekday of the + /// month". + ///
+ ///+ /// The '#' character is allowed for the day-of-week field. This character is + /// used to specify "the nth" XXX day of the month. For example, the + /// value of "6#3" in the day-of-week field means the third Friday of + /// the month (day 6 = Friday and "#3" = the 3rd one in the month). + /// Other examples: "2#1" = the first Monday of the month and + /// "4#5" = the fifth Wednesday of the month. Note that if you specify + /// "#5" and there is not 5 of the given day-of-week in the month, then + /// no firing will occur that month. If the '#' character is used, there can + /// only be one expression in the day-of-week field ("3#1,6#3" is + /// not valid, since there are two expressions). + ///
+ ///+ /// + ///
+ ///+ /// The legal characters and the names of months and days of the week are not + /// case sensitive. + ///
+ ///+ /// NOTES: + ///