ABP框架——集成Mysql

             最近公司不少業務都要求上雲,雲上的數據庫購買了mysql(估計是應爲便宜吧),因此我用abp框架開發的應用都要逐步切換到mysql。通過一陣摸索踩坑,總算是切換成功了,因此先記錄下方便後續切換使用,也順便分享給有須要的朋友。mysql

      1、集成MySQL

           其實集成mysql主要是參照官方文檔進行就能夠了(官方文檔:https://aspnetboilerplate.com/Pages/Documents/EF-Core-MySql-Integration),這裏也是簡單描述下關鍵步驟:sql

           (1)安裝Pomelo.EntityFrameworkCore.MySql

                   安裝Pomelo.EntityFrameworkCore.MySqlNuGet包到*.EntityFrameworkCore 項目上數據庫

            

          (2)配置DBContext

            替換YourProjectNameDbContextConfigurer.cs文件,將「UseSqlServer」替換爲「UseMySql」,以下json

 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中的數據庫連接,如:app

{
  "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」便可。以下 ide

            

      2、集成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   sqlserver

 

               (5)部署IIS相關配置

                將hangfire部署在iis中時,必需要證應用程序一直運行,不會被iis回收。ui

                a.設置應用程序池,

                 

               b.右鍵應用程序池-》高級設置,配置以下啓動模式爲AlwaysRunning,閒置超時設置爲0;

             

 

             c.郵件站點,選擇高級設置,設定預加載啓用爲true。

               

相關文章
相關標籤/搜索