Создайте динамическую строку подключения HangFire .NetCore

У меня есть проект, использующий HangFire для фонового задания, и мне нужно динамически изменять строку подключения без необходимости изменять код вручную каждый раз, когда я хочу запустить это задание для любого клиента, так как у меня много клиентов и много баз данных. я сделал это с обычным подключением в автозагрузке и DbContext на основе этого решения и работает как чудо Динамически изменять строку подключения в Asp.Net Core

и я хочу сделать то же самое с подключением HangFire, и это код, который я использую сейчас

            services.AddHangfire(configuration => configuration.UseStorage(
            new MySqlStorage("server=127.0.0.1;uid=root;database=0046696-k; Allow User Variables=True",
            new MySqlStorageOptions()
            {
                TransactionIsolationLevel = (System.Transactions.IsolationLevel?)IsolationLevel.ReadCommitted,
                QueuePollInterval = TimeSpan.FromSeconds(15),
                JobExpirationCheckInterval = TimeSpan.FromHours(1),
                CountersAggregateInterval = TimeSpan.FromMinutes(5),
                PrepareSchemaIfNecessary = true,
                DashboardJobListLimit = 50000,
                TransactionTimeout = TimeSpan.FromMinutes(1),
                TablesPrefix = "Hangfire"
            })));
        services.AddHangfireServer();

person Hazem    schedule 12.11.2020    source источник
comment
automatetheplanet.com/change-config-file-at-runtime   -  person Jim G.    schedule 13.11.2020
comment
Тогда не кодируйте строку подключения жестко. сохраните его в файле appsettings.json и загрузите при запуске. Таким образом, вам нужно только отредактировать файл настроек.   -  person Nkosi    schedule 13.11.2020
comment
@JimG. отличная статья, спасибо за помощь   -  person Hazem    schedule 13.11.2020


Ответы (1)


Не кодируйте строку подключения жестко.

Сохраните его в файле appsettings.json.

Например

{
  "ConnectionStrings": {
    "Hangfire": "server=127.0.0.1;uid=root;database=0046696-k; Allow User Variables=True"
  }

  /* other settings */
}  

и загрузите его при запуске.

//...Assume IConfiguration Configuration is loaded

//...

string connectionString = Configuration.GetConnectionString("Hangfire"); //<-- NOTE

services.AddHangfire(configuration => configuration.UseStorage(
    new MySqlStorage(connectionString, //<-- NOTE
    new MySqlStorageOptions() {
        TransactionIsolationLevel = (System.Transactions.IsolationLevel?)IsolationLevel.ReadCommitted,
        QueuePollInterval = TimeSpan.FromSeconds(15),
        JobExpirationCheckInterval = TimeSpan.FromHours(1),
        CountersAggregateInterval = TimeSpan.FromMinutes(5),
        PrepareSchemaIfNecessary = true,
        DashboardJobListLimit = 50000,
        TransactionTimeout = TimeSpan.FromMinutes(1),
        TablesPrefix = "Hangfire"
    })));

services.AddHangfireServer();

//...

Таким образом, вам нужно только отредактировать файл настроек по своему усмотрению.

Если параметры также необходимо динамически изменять, добавьте в настройки раздел, в котором будут храниться нужные параметры, и загрузить их в Startup.

person Nkosi    schedule 13.11.2020
comment
На самом деле я не думал, что это будет так просто, спасибо - person Hazem; 13.11.2020