You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
3.3 KiB
118 lines
3.3 KiB
|
|
|
|
|
|
using Hangfire;
|
|
using Hangfire.SqlServer;
|
|
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Microsoft.Identity.Client;
|
|
using System;
|
|
using System.Reflection;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Serialization;
|
|
|
|
using TaskManager.EntityFramework;
|
|
|
|
|
|
var builder = WebApplication.CreateBuilder(args);
|
|
|
|
|
|
|
|
|
|
// 从配置中获取连接字符串
|
|
var defaultConnection = builder.Configuration.GetConnectionString("Default");
|
|
|
|
builder.Services.AddHttpClient();
|
|
//builder.Services.AddScoped<LogController>();
|
|
//builder.Services.AddScoped<SUPPLIER_PRO_PLANING_CONTROLLER>();
|
|
|
|
//builder.Services.AddScoped<TaskConifgureController>();
|
|
|
|
//builder.Services.AddControllers()
|
|
// .AddJsonOptions(options =>
|
|
// {
|
|
// options.JsonSerializerOptions.Converters.Add(new CustomDateTimeConverter("yyyy-MM-dd HH:mm:ss"));
|
|
// options.JsonSerializerOptions.Converters.Add(new JsonStringEnumConverter());
|
|
// });
|
|
// 添加服务到容器
|
|
builder.Services.AddControllers();
|
|
|
|
// 配置 JSON 序列化选项(从配置中读取策略)
|
|
var jsonNamingPolicy = builder.Configuration.GetValue<string>("JsonOptions:PropertyNamingPolicy");
|
|
if (jsonNamingPolicy == "CamelCase")
|
|
{
|
|
builder.Services.AddControllers().AddJsonOptions(options =>
|
|
{
|
|
options.JsonSerializerOptions.PropertyNamingPolicy = JsonNamingPolicy.CamelCase;
|
|
});
|
|
}
|
|
// 可选:支持其他命名策略(如 PascalCase)
|
|
else if (jsonNamingPolicy == "PascalCase")
|
|
{
|
|
// ...
|
|
}
|
|
//builder.Services.AddTransient<LogJobFilter>();
|
|
// 配置 DbContext 使用 SQL Server 连接字符串
|
|
builder.Services.AddDbContext<JobDbContext>(options =>
|
|
options.UseSqlServer(defaultConnection));
|
|
|
|
// 配置 Hangfire 使用 SQL Server 存储
|
|
builder.Services.AddHangfire(
|
|
|
|
|
|
configuration => configuration
|
|
.SetDataCompatibilityLevel(CompatibilityLevel.Version_170) // 建议显式设置兼容性版本
|
|
.UseSimpleAssemblyNameTypeSerializer() // 简化类型序列化(可选)
|
|
.UseRecommendedSerializerSettings() // 使用推荐的序列化设置(可选)
|
|
.UseSqlServerStorage(defaultConnection, new SqlServerStorageOptions
|
|
{
|
|
// 可从配置中读取 Hangfire 存储选项(如队列、重试策略等)
|
|
CommandBatchMaxTimeout = TimeSpan.FromMinutes(5),
|
|
SlidingInvisibilityTimeout = TimeSpan.FromMinutes(5),
|
|
QueuePollInterval = TimeSpan.Zero,
|
|
UseRecommendedIsolationLevel = true,
|
|
DisableGlobalLocks = true
|
|
})
|
|
//.UseFilter(builder.Services.BuildServiceProvider().GetRequiredService<ILogger<LogJobFilter>>())
|
|
); // 添加日志过滤器(可选)
|
|
|
|
|
|
// 配置 Hangfire 服务器(可从配置中读取工作线程数等)
|
|
var workerCount = builder.Configuration.GetValue<int>("Hangfire:ServerOptions:WorkerCount", 10); // 默认值 10
|
|
builder.Services.AddHangfireServer(options =>
|
|
{
|
|
options.WorkerCount = workerCount;
|
|
// 可选:配置队列优先级
|
|
options.Queues = builder.Configuration.GetSection("Hangfire:ServerOptions:Queues").Get<string[]>() ?? new[] { "default" };
|
|
|
|
});
|
|
|
|
|
|
|
|
|
|
// 添加 Swagger 等其他服务...
|
|
builder.Services.AddEndpointsApiExplorer();
|
|
builder.Services.AddSwaggerGen();
|
|
|
|
var app = builder.Build();
|
|
|
|
|
|
app.UseHangfireDashboard();
|
|
|
|
// 配置中间件...
|
|
if (app.Environment.IsDevelopment())
|
|
{
|
|
app.UseSwagger();
|
|
app.UseSwaggerUI();
|
|
}
|
|
|
|
|
|
|
|
app.UseAuthorization();
|
|
app.MapControllers();
|
|
app.Run();
|
|
|
|
|
|
// 示例泛型方法
|
|
|