2020-05-18

ABP框架——集成Mysql

ABP框架——集成Mysql


             最近公司很多业务都要求上云,云上的数据库购买了mysql(估计是应为便宜吧),所以我用abp框架开发的应用都要逐步切换到mysql。经过一阵摸索踩坑,总算是切换成功了,所以先记录下方便后续切换使用,也顺便分享给有需要的朋友。

      一、集成MySQL

           其实集成mysql主要是参照官方文档进行就可以了(官方文档:https://aspnetboilerplate.com/Pages/Documents/EF-Core-MySql-Integration),这里也是简单描述下关键步骤:

           (1)安装Pomelo.EntityFrameworkCore.MySql

                   安装Pomelo.EntityFrameworkCore.MySqlNuGet包到*.EntityFrameworkCore 项目上

            

          (2)配置DBContext

            替换YourProjectNameDbContextConfigurer.cs文件,将“UseSqlServer”替换为“UseMySql”,如下

 1  public static class WeChatDbContextConfigurer 2  { 3   public static void Configure(DbContextOptionsBuilder<WeChatDbContext> builder, string connectionString) 4   { 5    builder.UseMySql(connectionString); 6   } 7  8   public static void Configure(DbContextOptionsBuilder<WeChatDbContext> builder, DbConnection connection) 9   {10    builder.UseMySql(connection);11   }12  }

          (3)配置链接字符串

          修改appsettings.json中的数据库链接,如:

{ "ConnectionStrings": { "Default": "server=127.0.0.1;uid=root;pwd=1234;database=mysqldemodb" }, ...}

          (4)修改Program.cs

           修改防止EF Core调用Program.BuildWebHost(),需要将BuildWebHost函数改名,录入改成InitWebHost。如下

 1  public class Program 2  { 3   public static void Main(string[] args) 4   { 5    InitWebHost(args).Run(); 6   } 7  8   public static IWebHost InitWebHost(string[] args) 9   {10    return WebHost.CreateDefaultBuilder(args)11     .UseStartup<Startup>()12     .Build();13   }14  }

           (5)创建数据库

               打开程序包管理控制台,选择默认项目*.EntityFrameworkCore,执行命令“update-database”即可。如下 

            

      二、集成HangFire

         (1)卸载默认hangfire

           卸载之前NuGet中abp默认安装的hangfire包,并注释Module中默认将hangfire的后台任务的注入代码。(如之前没有使用sqlserver的hangfire,次步骤可忽略)

[DependsOn(typeof (AbpHangfireAspNetCoreModule))]public class MyProjectWebModule : AbpModule{ public override void PreInitialize() {   //注释hangfire  //Configuration.BackgroundJobs.UseHangfire();     } //...}

         (2)项目引用NuGet包 ( Hangfire.AspNetCore,Hangfire.MySql.Core)

          

         (3)修改startup.cs类           

 1 public IServiceProvider ConfigureServices(IServiceCollection services) 2   { 3    //........ 4    //配置msql下的hangfire 5    services.AddHangfire(x => x.UseStorage(new MySqlStorage( 6     _appConfiguration.GetConnectionString("Default"), 7      new MySqlStorageOptions 8      { 9       TransactionIsolationLevel = IsolationLevel.ReadCommitted, // 事务隔离级别。默认是读取已提交。10       QueuePollInterval = TimeSpan.FromSeconds(15),    //- 作业队列轮询间隔。默认值为15秒。11       JobExpirationCheckInterval = TimeSpan.FromHours(1),  //- 作业到期检查间隔(管理过期记录)。默认值为1小时。12       CountersAggregateInterval = TimeSpan.FromMinutes(5),  //- 聚合计数器的间隔。默认为5分钟。13       PrepareSchemaIfNecessary = true,       //- 如果设置为true,则创建数据库表。默认是true。14       DashboardJobListLimit = 50000,       //- 仪表板作业列表限制。默认值为50000。15       TransactionTimeout = TimeSpan.FromMinutes(1),   //- 交易超时。默认为1分钟。16       TablePrefix = "Hangfire"17      }18     )));19     //........20   }
1   public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)2    {3    app.UseHangfireServer(); //启用hangfire服务4    app.UseHangfireDashboard(); //使用hangfire面板5   }

             (4)启动项目,访问Hangfire面板

             本地访问地址:https://localhost:端口/Hangfire   

 


No comments:

Post a Comment