提交 5ee3360a 编写于 作者: MELF晓宇's avatar MELF晓宇 🤤

修改配置文件方式为Json

上级 5e2bd9e2
......@@ -47,6 +47,10 @@ go build -o main.exe main.go
### 更新日志
### V0.0.2
- 修改配置文件方式为Json
### v 0.0.1
- 初始化项目
......
......@@ -12,18 +12,65 @@
package config
import "time"
const (
DbHost = "127.0.0.1" // 数据库主机
DbPort = "3306" // 数据库端口
DbUser = "root" // 数据库用户名
DbPassword = "123456789" // 数据库密码
DbName = "gin-start" // 数据库名称
MaxIdleConns = 10 // 空闲连接池中连接的最大数量
MaxOpenConns = 100 // 打开数据库连接的最大数量
ConnMaxLifetime = time.Hour // 连接可复用的最大时间
RouterHost = "0.0.0.0"
RouterPort = "2048"
import (
"encoding/json"
"fmt"
"io/ioutil"
"sync"
)
type GlobalConfig struct {
Database DatabaseConfig `json:"Database"`
Self SelfConfig `json:"Self"`
}
type DatabaseConfig struct {
Type string `json:"Type"`
DbHost string `json:"DbHost"`
DbPort string `json:"DbPort"`
DbUser string `json:"DbUser"`
DbPassword string `json:"DbPassword"`
DbName string `json:"DbName"`
MaxIdleConns int `json:"MaxIdleConns"`
MaxOpenConns int `json:"MaxOpenConns"`
ConnMaxLifetime int `json:"ConnMaxLifetime"`
}
type SelfConfig struct {
Host string `json:"RouterHost"`
Port string `json:"RouterPort"`
}
var (
globalConfig *GlobalConfig
configMux sync.RWMutex
)
func Config() *GlobalConfig {
return globalConfig
}
// InitConfigJson
/**
* @Description: 导入配置文件
* @param fliepath config文件的路径
* @return error 错误
*/
func InitConfigJson(fliepath string) error {
var config GlobalConfig
file, err := ioutil.ReadFile(fliepath)
if err != nil {
fmt.Println("配置文件读取错误,找不到配置文件", err)
return err
}
if err = json.Unmarshal(file, &config); err != nil {
fmt.Println("配置文件读取失败", err)
return err
}
configMux.Lock()
globalConfig = &config
configMux.Unlock()
return nil
}
{
"Database": {
"Type": "Mysql",
"DbHost": "127.0.0.1",
"DbPort": "3306",
"DbUser": "root",
"DbPassword": "123456789",
"DbName": "gin-start",
"MaxIdleConns": 10,
"MaxOpenConns": 100,
"ConnMaxLifetime": 1
},
"Self": {
"RouterHost": "0.0.0.0",
"RouterPort": "2048"
}
}
\ No newline at end of file
......@@ -15,11 +15,19 @@ package main
import (
"fmt"
"gin-start/config"
myDB "gin-start/models"
"gin-start/routers"
)
func main() {
//初始化配置文件
err := config.InitConfigJson("config\\Config.json")
if err != nil {
panic(err)
}
// 连接数据库
errDB := myDB.InitDB()
if errDB != nil {
......
......@@ -17,6 +17,7 @@ import (
Config "gin-start/config"
"gorm.io/driver/mysql"
"gorm.io/gorm"
"time"
)
var (
......@@ -29,24 +30,41 @@ var (
* @return err 错误
*/
func InitDB() (err error) {
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
Config.DbUser, Config.DbPassword, Config.DbHost, Config.DbPort, Config.DbName,
)
fmt.Println("连接数据库")
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
fmt.Println("数据库连接失败")
// 获取配置文件
config := Config.Config()
switch config.Database.Type {
case "Mysql":
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
config.Database.DbUser, config.Database.DbPassword, config.Database.DbHost, config.Database.DbPort, config.Database.DbName,
)
fmt.Println("连接数据库")
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
//fmt.Println("数据库连接失败")
panic("数据库连接失败")
}
default:
dsn := fmt.Sprintf("%s:%s@tcp(%s:%s)/%s?charset=utf8mb4&parseTime=True&loc=Local",
config.Database.DbUser, config.Database.DbPassword, config.Database.DbHost, config.Database.DbPort, config.Database.DbName,
)
fmt.Println("连接数据库")
DB, err = gorm.Open(mysql.Open(dsn), &gorm.Config{})
if err != nil {
fmt.Println(err)
fmt.Println("数据库连接失败")
}
}
// 维护连接池
theDB, _ := DB.DB()
// 设置空闲连接池中连接的最大数量
theDB.SetMaxIdleConns(Config.MaxIdleConns)
theDB.SetMaxIdleConns(config.Database.MaxIdleConns)
// 设置打开数据库连接的最大数量
theDB.SetMaxOpenConns(Config.MaxOpenConns)
theDB.SetMaxOpenConns(config.Database.MaxOpenConns)
// 设置了连接可复用的最大时间
theDB.SetConnMaxLifetime(Config.ConnMaxLifetime)
theDB.SetConnMaxLifetime(time.Hour * time.Duration(config.Database.ConnMaxLifetime))
// 自动迁移
err = DB.AutoMigrate(
......
......@@ -21,6 +21,9 @@ import (
)
func Init() *gin.Engine {
// 获取配置文件
config := Config.Config()
r := gin.Default()
// 使用中间件
......@@ -33,7 +36,7 @@ func Init() *gin.Engine {
// 配置静态文件夹路径 第一个参数是api,第二个是文件夹路径
r.StaticFS("/static", http.Dir("./static"))
err := r.Run(fmt.Sprintf("%s:%s", Config.RouterHost, Config.RouterPort))
err := r.Run(fmt.Sprintf("%s:%s", config.Self.Host, config.Self.Port))
if err != nil {
log.Fatal("初始化路由出错")
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册