Program.cs 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. using Database.Database;
  2. using Esim.SendMail.Jobs;
  3. using Esim.SendMail.Services;
  4. using Microsoft.EntityFrameworkCore;
  5. using Quartz;
  6. namespace Esim.SendMail;
  7. public class Program
  8. {
  9. private static readonly log4net.ILog log = log4net.LogManager.GetLogger(typeof(Program));
  10. public static async Task Main(string[] args)
  11. {
  12. // Configure log4net
  13. var logRepository = log4net.LogManager.GetRepository(System.Reflection.Assembly.GetEntryAssembly());
  14. log4net.Config.XmlConfigurator.Configure(logRepository, new FileInfo("log4net.config"));
  15. log.Info("===========================================");
  16. log.Info("Esim.SendMail Service Starting...");
  17. log.Info("===========================================");
  18. var builder = Host.CreateApplicationBuilder(args);
  19. // Add configuration
  20. builder.Configuration.AddJsonFile("appsettings.json", optional: false, reloadOnChange: true);
  21. // Add DbContext
  22. var connectionString = builder.Configuration["Connection"];
  23. builder.Services.AddDbContext<ModelContext>(options =>
  24. options.UseOracle(connectionString));
  25. // Add Email Service as singleton for connection pooling
  26. builder.Services.AddSingleton<IEmailService, HighPerformanceEmailService>();
  27. // Configure Quartz
  28. var jobIntervalSeconds = int.Parse(builder.Configuration["Job:IntervalSeconds"] ?? "10");
  29. builder.Services.AddQuartz(q =>
  30. {
  31. q.UseMicrosoftDependencyInjectionJobFactory();
  32. var jobKey = new JobKey("MessageQueueJob");
  33. q.AddJob<MessageQueueJob>(opts => opts.WithIdentity(jobKey));
  34. q.AddTrigger(opts => opts
  35. .ForJob(jobKey)
  36. .WithIdentity("MessageQueueJob-trigger")
  37. .StartNow()
  38. .WithSimpleSchedule(x => x
  39. .WithIntervalInSeconds(jobIntervalSeconds)
  40. .RepeatForever()));
  41. });
  42. builder.Services.AddQuartzHostedService(q =>
  43. {
  44. q.WaitForJobsToComplete = true;
  45. });
  46. var host = builder.Build();
  47. log.Info($"Job interval: {jobIntervalSeconds} seconds");
  48. log.Info("Service started successfully. Press Ctrl+C to stop.");
  49. await host.RunAsync();
  50. }
  51. }