Json工程配置加载模块

作者: 爱翻身的咸鱼 | 来源:发表于2019-06-27 20:54 被阅读9次

项目地址:github.com/cuckoopark/configuration

这是一个通用的加载配置模块。

  • 支持Json格式的配置文件。
  • 首先进行主配置文件的加载。
  • 根据主配置文件中的组件设置,动态加载各个组件的配置。

安装

go get -u github.com/cuckoopark/configuration

设计思想

建议使用一个单独的目录编写配置模块的相关代码,例如接下来代码均位于src/lib/conf目录中。

首先,我们需要在模块的init()函数中,注册所有的组件的加载配置,包括主应用configuration.Application,以及各个自定义的组件。

然后,在调用configuration.Init方法时,传入options,里面包括配置文件所在目录。接下来按如下步骤初始化配置:

  • 初始化主应用配置。
  • 从主应用配置中,获取要加载的组件名称。
  • 对于每一个要加载的组件,生成完整的文件路径,然后加载。

主应用

首先我们要定义主应用的数据格式,例如:

package conf

// 主应用的配置信息格式
type ApplicationConfig struct {
    DeployEnv    string   `json:"DeployEnv"`    // 部署环境
    DeployTarget string   `json:"DeployTarget"` // 部署目标
    // 其他字段...
    Components   []string `json:"Components"`   // 包含的组件配置列表
}

func (c ApplicationConfig) GetComponents() []string {
    return c.Components
}

这里需要实现configuration.ApplicationConfig接口中的方法,即获取要加载的组件列表。

自定义组件

直接定义一个可以Json序列化的结构体,例如:

package conf

// MySQL的配置信息格式
type MySqlConfig struct {
    Host     string `json:"Host"`     // 服务器主机地址
    Port     int    `json:"Port"`     // 服务器端口号
    User     string `json:"User"`     // 服务器登陆用户
    Password string `json:"Password"` // 数据库密码
    // 其他参数...
}

初始化模块

在模块中,定义初始化接口,用于注册组件的目标对象:

package conf

var (
    Application ApplicationConfig // 主应用配置
    MySql       MySqlConfig       // MySQL配置
)

func init() {
    var err error
    if err = configuration.RegisterComponent(configuration.Application, &Application); err != nil {
        log.Fatal(err)
    }
    if err = configuration.RegisterComponent("mysql", &MySql); err != nil {
        log.Fatal(err)
    }
    // 其他组件的注册语句...
}

加载配置

最后,编写整个配置模块的加载方法:

package conf

// 加载配置
func Init() {
    options := configuration.Options{
        ConfigPath:     os.Getenv("CONFPATH"),
        MainFileName:   "application",
        PrefixFileName: "app",
    }
    err := configuration.Init(options)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Printf("主配置 %+v\n", Application)
    fmt.Printf("MySQL配置 %+v\n", MySql)
}

配置文件

在项目中创建resource/conf目录,里面只有.json的文件,中括号中的变量都是configuration.Options的参数:

  • 主应用配置文件:[MainFileName].json,默认值为application.json
  • 组件配置文件:如果[PrefixFileName]为空,则文件名为[组件名].json,否则为[PrefixFileName]-[组件名].json

每一个Json文件中的字段,与相应组件的Go结构体对应上即可。

我们样例中使用环境变量作为配置文件路径的传参方式,那么运行时可以设置路径:

CONFPATH=`pwd`/resource/conf go run main.go

相关文章

  • Json工程配置加载模块

    项目地址:github.com/cuckoopark/configuration 这是一个通用的加载配置模块。 支...

  • .NET 5/6 配置自动注册 AutoConfigure

    功能打散揉碎成模块之后, 最麻烦的莫过于各个模块的配置如何加载. .NET4.8 之前, 可以用自定义的 Json...

  • 17.json、pickle、shelve模块

    一、json模块 1). json模块概述 json格式内容为字符串 json:前后端交互使用广泛的格式;配置文件...

  • webpack(三)打包图片

    webpack本身只能加载js和json模块,对于其他文件(模块) ,需要安装其他的加载器来支持。 loader本...

  • 九、资源加载服务模块

    结合文件读取,加载,解析模块的内容,可以做一个资源加载服务模块,可以加载配置文件,加载资源,加载场景等。

  • 反射

    可以通过配置文件来动态配置和加载类,以实现软件工程理论里所提及的类与类,模块与模块之间的解耦。反射最经典的应用是s...

  • composer

    创建composer.json 命令:composer init 配置加载 使用

  • node-npm包-工程配置类

    工程配置类 dotenv Dotenv是一个零依赖模块,它将环境变量从.env文件加载到process.env中。...

  • node栈-第三方工具-工程配置类

    工程配置类 dotenv Dotenv是一个零依赖模块,它将环境变量从.env文件加载到process.env中。...

  • webpack简单记录

    安装webpack 修改package.json 添加设置配置文件 配置文件示例 构件命令 加载css 示例 加载...

网友评论

    本文标题:Json工程配置加载模块

    本文链接:https://www.haomeiwen.com/subject/ydydcctx.html