feat: 添更新配置选项支持添加SQL导入功能
This commit is contained in:
@@ -25,6 +25,7 @@ func ConfigurationInit() {
|
|||||||
logger.InitLogger()
|
logger.InitLogger()
|
||||||
// 连接数据库实例
|
// 连接数据库实例
|
||||||
db.Connect()
|
db.Connect()
|
||||||
|
db.ImportSQL()
|
||||||
// 连接Redis实例
|
// 连接Redis实例
|
||||||
redis.Connect()
|
redis.Connect()
|
||||||
// 启动调度任务实例
|
// 启动调度任务实例
|
||||||
|
|||||||
@@ -31,6 +31,10 @@ func initFlag() {
|
|||||||
// --c /etc/restconf.yaml
|
// --c /etc/restconf.yaml
|
||||||
// -c /etc/restconf.yaml
|
// -c /etc/restconf.yaml
|
||||||
pflag.StringP("config", "c", "./etc/restconf.yaml", "Specify Configuration File")
|
pflag.StringP("config", "c", "./etc/restconf.yaml", "Specify Configuration File")
|
||||||
|
// --sqlPath ./sql/20250228.sql
|
||||||
|
pflag.String("sqlPath", "", "Execution SQL File Path")
|
||||||
|
// --sqlSource default
|
||||||
|
pflag.String("sqlSource", "default", "Execution SQL Database Source")
|
||||||
// --version
|
// --version
|
||||||
// -V
|
// -V
|
||||||
pVersion := pflag.BoolP("version", "V", false, "Output program version")
|
pVersion := pflag.BoolP("version", "V", false, "Output program version")
|
||||||
@@ -96,6 +100,21 @@ func initViper(configDir *embed.FS) {
|
|||||||
conf.Set("runTime", time.Now())
|
conf.Set("runTime", time.Now())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// readExternalConfig 读取外部文件配置(放弃旧的配置序列化时候才用)
|
||||||
|
func readExternalConfig(configPaht string) {
|
||||||
|
f, err := os.Open(configPaht)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalf("config external file read error: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer f.Close()
|
||||||
|
|
||||||
|
if err = conf.MergeConfig(f); err != nil {
|
||||||
|
log.Fatalf("config external file read error: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// 配置文件读取进行内部参数合并
|
// 配置文件读取进行内部参数合并
|
||||||
func configInMerge(configFile string) {
|
func configInMerge(configFile string) {
|
||||||
// 指定配置文件读取序列化
|
// 指定配置文件读取序列化
|
||||||
@@ -156,21 +175,6 @@ func SetAssetsDirFS(assetsDir *embed.FS) {
|
|||||||
conf.Set("AssetsDir", assetsDir)
|
conf.Set("AssetsDir", assetsDir)
|
||||||
}
|
}
|
||||||
|
|
||||||
// readExternalConfig 读取外部文件配置
|
|
||||||
func readExternalConfig(configPaht string) {
|
|
||||||
f, err := os.Open(configPaht)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatalf("config external file read error: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer f.Close()
|
|
||||||
|
|
||||||
if err = conf.MergeConfig(f); err != nil {
|
|
||||||
log.Fatalf("config external file read error: %s", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
// IsSystemUser 用户是否为系统管理员
|
// IsSystemUser 用户是否为系统管理员
|
||||||
func IsSystemUser(userId int64) bool {
|
func IsSystemUser(userId int64) bool {
|
||||||
if userId <= 0 {
|
if userId <= 0 {
|
||||||
|
|||||||
104
src/framework/database/db/expand.go
Normal file
104
src/framework/database/db/expand.go
Normal file
@@ -0,0 +1,104 @@
|
|||||||
|
package db
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"path/filepath"
|
||||||
|
"strings"
|
||||||
|
|
||||||
|
"gorm.io/gorm"
|
||||||
|
|
||||||
|
"be.ems/src/framework/config"
|
||||||
|
)
|
||||||
|
|
||||||
|
// ImportSQL 导入SQL
|
||||||
|
func ImportSQL() {
|
||||||
|
sqlPath := config.Get("sqlPath").(string)
|
||||||
|
if sqlPath == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
sqlSource := config.Get("sqlSource").(string)
|
||||||
|
if sqlSource == "" {
|
||||||
|
sqlSource = config.Get("database.defaultDataSourceName").(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 数据源
|
||||||
|
db := DB(sqlSource)
|
||||||
|
if db == nil {
|
||||||
|
log.Fatalln("not database source")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取路径信息
|
||||||
|
fileInfo, err := os.Stat(sqlPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理目录或文件
|
||||||
|
if fileInfo.IsDir() {
|
||||||
|
// 处理目录
|
||||||
|
files, err := os.ReadDir(sqlPath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, file := range files {
|
||||||
|
if file.IsDir() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
if !strings.HasSuffix(file.Name(), ".sql") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
processSQLFile(db, filepath.Join(sqlPath, file.Name()))
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// 处理单个文件
|
||||||
|
processSQLFile(db, sqlPath)
|
||||||
|
}
|
||||||
|
|
||||||
|
log.Println("Import SQL End")
|
||||||
|
os.Exit(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
// 处理单个SQL文件的通用函数
|
||||||
|
func processSQLFile(db *gorm.DB, filePath string) {
|
||||||
|
file, err := os.Open(filePath)
|
||||||
|
if err != nil {
|
||||||
|
log.Fatalln(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
defer file.Close()
|
||||||
|
|
||||||
|
// 逐行读取 SQL 文件
|
||||||
|
scanner := bufio.NewScanner(file)
|
||||||
|
var sqlBuilder strings.Builder
|
||||||
|
for scanner.Scan() {
|
||||||
|
line := strings.TrimSpace(scanner.Text())
|
||||||
|
// 跳过注释和空行
|
||||||
|
if strings.HasPrefix(line, "--") || strings.TrimSpace(line) == "" {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
// 跳过配置语句
|
||||||
|
if strings.HasPrefix(line, "/*!") {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlBuilder.WriteString(line + "\n")
|
||||||
|
|
||||||
|
// 当遇到分号时,执行 SQL 语句
|
||||||
|
if strings.HasSuffix(line, ";") {
|
||||||
|
// 执行 SQL 语句
|
||||||
|
if err := db.Exec(sqlBuilder.String()).Error; err != nil {
|
||||||
|
log.Fatalln(err.Error())
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
sqlBuilder.Reset()
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user