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。(不重命名的话,运行将会报错。详情请参考:https://github.com/dotnet/efcore/issues/9076)如下

 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   

               (5)部署IIS相关配置

                将hangfire部署在iis中时,必须要证应用程序一直运行,不会被iis回收,步骤如下。

                a.设置应用程序池,

                 

               b.右键应用程序池-》高级设置,配置如下启动模式为AlwaysRunning,闲置超时设置为0;

             

             c.邮件站点,选择高级设置,设定预加载启用为true。

               

          d.打开站点配置编辑器,设置doappinitafterrestart为true;打开集合,配置预加载页面。

原文地址:https://www.cnblogs.com/yige/p/12884155.html