最近公司很多业务都要求上云,云上的数据库购买了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
(5)部署IIS相关配置
将hangfire部署在iis中时,必须要证应用程序一直运行,不会被iis回收。
a.设置应用程序池,
b.右键应用程序池-》高级设置,配置如下启动模式为AlwaysRunning,闲置超时设置为0;
c.邮件站点,选择高级设置,设定预加载启用为true。
来源:oschina
链接:https://my.oschina.net/u/4397179/blog/4283738