Files
kami_scripts/verification/main.go
danial a6c0b17075 feat(lock): 添加文件锁功能以防止多实例运行
- 在 main.go 中集成文件锁,确保应用程序只能有一个实例运行
- 新增 lock.go 文件,提供锁定和解锁文件的功能
- 更新 go.mod 和 go.sum 文件,引入 gofrs/flock 依赖
- 修改 submit_order.go 中的日志记录,优化订单发送信息
2025-07-09 19:47:35 +08:00

83 lines
1.7 KiB
Go

package main
import (
"context"
"fmt"
"log"
"order/internal/client"
"order/internal/config"
"order/internal/interfaces"
"order/internal/repositories"
"order/internal/services"
"order/internal/utils"
"gorm.io/driver/mysql"
"gorm.io/gorm"
)
var (
appLogger interfaces.Logger
db *gorm.DB
)
func init() {
// 加载配置
cfg := config.GetConfig()
// 初始化日志
zapLogger, err := utils.NewLogger(cfg)
if err != nil {
log.Fatalf("初始化日志失败: %v", err)
}
defer func() {
_ = zapLogger.Sync()
}()
// 创建日志适配器
appLogger = utils.NewZapLoggerAdapter(zapLogger)
// 初始化数据库连接
dsn := fmt.Sprintf("%s:%s@tcp(%s:%d)/%s?charset=utf8mb4&parseTime=True&loc=Local",
cfg.Database.Username,
cfg.Database.Password,
cfg.Database.Host,
cfg.Database.Port,
cfg.Database.DBName,
)
db, err = gorm.Open(mysql.Open(dsn), &gorm.Config{
Logger: utils.NewGormLogger(appLogger),
})
if err != nil {
appLogger.Fatal("连接数据库失败", "error", err)
}
}
func main() {
// 文件锁,防止多实例
if err := LockFile("app.lock"); err != nil {
log.Fatalf("已有其他实例在运行: %v", err)
}
defer UnlockFile()
// 加载配置
cfg := config.GetConfig()
// 创建仓储实例
orderRepo := repositories.NewOrderRepository(db)
// 创建订单发送器(这里需要实现具体的发送逻辑)
orderSender := client.NewMockOrderSender(appLogger)
// // 创建订单服务
orderService := services.NewOrderService(orderRepo, orderSender, appLogger, cfg)
// 创建上下文
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
if err := orderService.ProcessOrders(ctx); err != nil {
appLogger.Error("处理订单失败", "error", err)
}
}