zoukankan      html  css  js  c++  java
  • 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;打开集合,配置预加载页面。

  • 相关阅读:
    [C#1] 2类型基础
    [C#2] 5迭代器
    [C#1] 6方法
    [C#1] 8数组
    [C#1] 12特性
    [C#1] 10事件
    [C#2] 2匿名方法
    实用代码JavaScript实用小函数一枚(深入对象取值)
    [C#1] 11接口
    实用代码C#获取本机网络适配器信息及MAC地址
  • 原文地址:https://www.cnblogs.com/yige/p/12884155.html
Copyright © 2011-2022 走看看