1. 实现配置文件解析
2. 实现数据库连接
This commit is contained in:
68
internal/core/application.go
Normal file
68
internal/core/application.go
Normal file
@@ -0,0 +1,68 @@
|
||||
// Package core 提供核心应用协调功能
|
||||
// 负责初始化和协调API、任务执行器和存储等核心组件
|
||||
// 管理整个应用的生命周期
|
||||
package core
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/config"
|
||||
"git.huangwc.com/pig/pig-farm-controller/internal/storage/db"
|
||||
)
|
||||
|
||||
// Application 代表核心应用结构
|
||||
// 协调API、任务执行器和存储组件的工作
|
||||
type Application struct {
|
||||
// Storage 存储组件实例
|
||||
Storage db.Storage
|
||||
|
||||
// Config 应用配置
|
||||
Config *config.Config
|
||||
}
|
||||
|
||||
// NewApplication 创建并返回一个新的核心应用实例
|
||||
// 初始化所有核心组件
|
||||
func NewApplication(cfg *config.Config) *Application {
|
||||
// 从配置中获取数据库连接字符串
|
||||
connectionString := cfg.GetDatabaseConnectionString()
|
||||
|
||||
// 从配置中获取连接池参数
|
||||
maxOpenConns := cfg.Database.MaxOpenConns
|
||||
maxIdleConns := cfg.Database.MaxIdleConns
|
||||
connMaxLifetime := cfg.Database.ConnMaxLifetime
|
||||
|
||||
// 初始化存储组件
|
||||
store := db.NewStorage(connectionString, maxOpenConns, maxIdleConns, connMaxLifetime)
|
||||
|
||||
return &Application{
|
||||
Storage: store,
|
||||
Config: cfg,
|
||||
}
|
||||
}
|
||||
|
||||
// Start 启动核心应用
|
||||
// 按正确顺序启动所有核心组件
|
||||
func (app *Application) Start() error {
|
||||
// 启动存储组件
|
||||
if err := app.Storage.Connect(); err != nil {
|
||||
return fmt.Errorf("failed to connect to storage: %v", err)
|
||||
}
|
||||
log.Println("Storage connected successfully")
|
||||
|
||||
// TODO: 启动其他核心组件
|
||||
return nil
|
||||
}
|
||||
|
||||
// Stop 停止核心应用
|
||||
// 按正确顺序停止所有核心组件
|
||||
func (app *Application) Stop() error {
|
||||
// 停止存储组件
|
||||
if err := app.Storage.Disconnect(); err != nil {
|
||||
return fmt.Errorf("failed to disconnect from storage: %v", err)
|
||||
}
|
||||
log.Println("Storage disconnected successfully")
|
||||
|
||||
// TODO: 停止其他核心组件
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user