Skip to content

配置文件

使用 github.com/spf13/viper 读取并加载了配置内容

使用 github.com/joho/godotenv 处理 .env 这类型的内容

TIP

Viper 支持的多种格式的配置文件,你可以按照你的喜好使用

格式文件扩展名说明
JSON.json标准 JSON 格式
YAML/YML.yaml, .yml常用于配置,支持嵌套结构
TOML.toml用于更结构化的配置
HCL.hclHashiCorp 的配置语言
INI.ini传统的配置文件格式
envfile.env类似 .env 文件,键值对

一般情况下,常用的是:

  • 通过 json 或者 yaml 管理所有配置,这相当于是团队内部的通用配置,新增或者修改都应该维护这个配置文件,它同时也受 git 的管理

  • 通过 env 文件管理自己的配置内容,这是你自己个性化的配置,它的目的是重写 json 或者 yaml 中内容,并且不能受到 git 的管理

    • env 的文件名称不重要,常见的是 .env.env.local.env.test 等等

    • 但要保证内容是 键值对 即可

    env
    APP_NAME=Gooze-Starter

配置内容

文件内的 remark 字段都是会不被解析的,它只是对它后续的字段做一个解释备注

精简版配置内容(yaml)

yaml
app:
    name: app
    env: test
    addr: ":18002"
    timeout: 1
    routerPrefix: api/v1
databases:
    - name: master
      driver: mysql
      dsn: root:123456@tcp(127.0.0.1:3307)/gooze-starter?charset=utf8&parseTime=True&loc=Local&timeout=5s
      useGorm: true
redis:
    addr: "127.0.0.1:6379"
    password: ""
    db: 0
    isCluster: false
mongo:
    url: mongodb://admin:123123@192.168.0.13:27017/?minPoolSize=5&maxPoolSize=35&maxIdleTimeMS=30000
log:
    path: ./logs/
    mode: both
jwt:
    secretKey: 123456
    expire: 86400
oss:
    type: local
    savePath: ./static/resource/
    url: "http://192.168.5.122:19001"
需要 完整版 yaml 类型的配置文件?
yaml
app:
    name: app
    env: test
    addr: ":18002"
    timeout: 1
    routerPrefix: mgr/v1
databases:
    - name: master
      driver: mysql
      dsn: root:123456@tcp(127.0.0.1:3307)/greasyx-admin?charset=utf8&parseTime=True&loc=Local&timeout=5s
      useGorm: true
      remark: 以下配置是可选的,而且有些Driver是不支持有些配置的,如果没有配置,则使用默认配置
      logLevel: 3
      enableLogWriter: false
      maxIdleConn: 10
      maxConn: 200
      slowThreshold: 2
redis:
    addr: "127.0.0.1:6379"
    password: ""
    db: 0
    isCluster: false
mongo:
    url: mongodb://admin:123123@192.168.0.13:27017/?minPoolSize=5&maxPoolSize=35&maxIdleTimeMS=30000
log:
    remark: 日志的所有配置都是可选的,都有默认配置,可以先看一下下面关于配置的解释
    path: ./logs/
    mode: both
    logrotate: false
    recover: true
    maxSize: 1
    maxBackups: 3
    maxAge: 1
    compress: true
jwt:
    secretKey: 123456
    expire: 86400
casbin:
    modePath: ""
    remark: 当你使用了多个数据库时,需要指定一个数据库名,只有一个时,可以忽略这个配置
    dbName: mysql
oss:
    type: local
    savePath: ./static/resource/
    url: "http://192.168.5.122:19001"
    accessKey: ""
    secretKey: ""
    bucketName: ""
需要 精简版 json 类型的配置文件?
json
{
    "app": {
        "name": "app",
        "env": "test",
        "addr": ":18002",
        "timeout": 1,
        "routerPrefix": "mgr/v1"
    },
    "databases": [
        {
            "name": "master",
            "driver": "mysql",
            "dsn": "root:123456@tcp(127.0.0.1:3307)/greasyx-admin?charset=utf8&parseTime=True&loc=Local&timeout=5s",
            "useGorm": true
        }
    ],
    "redis": {
        "addr": "127.0.0.1:6379",
        "password": "",
        "db": 0,
        "isCluster": false
    },
    "mongo": {
        "url": "mongodb://admin:123123@192.168.0.13:27017/?minPoolSize=5&maxPoolSize=35&maxIdleTimeMS=30000"
    },
    "log": {
        "path": "./logs/",
        "mode": "both"
    },
    "jwt": {
        "secretKey": "123456",
        "expire": 86400
    },
    "oss": {
        "type": "local",
        "savePath": "./static/resource/",
        "url": "http://192.168.5.122:19001"
    }
}
需要 完整版 json 类型的配置文件?
json
{
    "app": {
        "name": "app",
        "env": "test",
        "addr": ":18002",
        "timeout": 1,
        "routerPrefix": "mgr/v1"
    },
    "databases": [
        {
            "name": "master",
            "driver": "mysql",
            "dsn": "root:123456@tcp(127.0.0.1:3307)/greasyx-admin?charset=utf8&parseTime=True&loc=Local&timeout=5s",
            "useGorm": true,
            "remark": "以下配置是可选的,而且有些Driver是不支持有些配置的,如果没有配置,则使用默认配置",
            "logLevel": 3,
            "enableLogWriter": false,
            "maxIdleConn": 10,
            "maxConn": 200,
            "slowThreshold": 2
        }
    ],
    "redis": {
        "addr": "127.0.0.1:6379",
        "password": "",
        "db": 0,
        "isCluster": false
    },
    "mongo": {
        "url": "mongodb://admin:123123@192.168.0.13:27017/?minPoolSize=5&maxPoolSize=35&maxIdleTimeMS=30000"
    },
    "log": {
        "remark": "日志的所有配置都是可选的,都有默认配置,可以先看一下下面关于配置的解释",
        "path": "./logs/",
        "mode": "both",
        "logrotate": false,
        "recover": true,
        "maxSize": 1,
        "maxBackups": 3,
        "maxAge": 1,
        "compress": true
    },
    "jwt": {
        "secretKey": "123456",
        "expire": 86400
    },
    "casbin": {
        "modePath": "",
        "remark": "当你使用了多个数据库时,需要指定一个数据库名,只有一个时,可以忽略这个配置",
        "dbName": "mysql"
    },
    "oss": {
        "type": "local",
        "savePath": "./static/resource/",
        "url": "http://192.168.5.122:19001",
        "accessKey": "",
        "secretKey": "",
        "bucketName": ""
    }
}

配置解释

1. app 模块

配置项类型描述
namestring应用名称
envstring当前环境,与 ginEnvGinMode 保持一致,可选项有 debugtestrelease
addrstring服务地址,可以是 ip:port,也可以只要 :port,当没有填写 IP 时,gooze 会自动解析当前的局域网 IP 地址
timeoutint超时时长
routerPrefixstring路由前缀,Casbin 中间件与 [API 代码生成] 时需要,默认 api/v1

2. databases 模块

是一个 数据库配置项列表(list of database configs),支持配置多个数据库连接。

配置项类型描述
namestring连接名称,这个很重要,多链接时将通过这个值获取对应的 DB
driverstring使用哪一个驱动,目前支持 MySQLPostgresSQLSQLiteSQLServerOracle
dsnstring连接信息
useGormbool是否使用 gorm, 为 true 时使用的是 *gorm.DB, 为 false 时使用的是 *sqlx.DB,
logLevelint3哪些级别的日志需要记录,sqlx 不支持该参数
enableLogWriterboolfalse是否使用 zap 日志记录数据库日志,sqlx 不支持该参数
maxIdleConnint10最大空闲连接
maxConnint200最大连接数
slowThresholdint2SQL 慢查询阈值(单位:秒),sqlx 不支持该参数

📘 logLevel 可选值:

  • 1:Error
  • 2:Warn
  • 3:Info

3. redis 模块

配置项类型描述
addrstring连接信息
passwordstring密码
dbint使用哪个库
isClusterbool是否集群

4. mongo 模块

配置项类型描述
urlstring连接信息

5. log 模块

配置项类型描述
pathstring./logs/日志保存的路径
modestringboth文件写入的方式
logrotatebooltrue是否开启日志轮转,由于日志是按照日期分目录的,为 true 时,会在每天晚上 24 点按照日期重新创建日志目录
recoverbooltrue是否重新创建已删除的日志文件
maxSizeint1单文件最大容量, 单位是 MB
maxBackupsint3最大保留过期文件个数
maxAgeint7保留过期文件的最大时间间隔, 单位是天
compressbooltrue是否需要压缩滚动日志, 使用的 gzip 压缩

📘 mode 可选值:

  • file:写入文件
  • console:写入控制台
  • both:写入文件和控制台
  • close:关闭日志记录,不写入任何地方

logrotate 的注意点

如果你使用了 Linux 自带的 logrotate ,那么建议 Logrotate 设置为 false

recover 的注意点

zap 日志库在你项目启动后删除已经生成的日志文件,将不会自动创建文件并继续写入,但如果这个设置为 true 则会检查并重新创建文件,但有一定的性能影响


6. jwt 模块

如果 API 接口不需要使用 JWT Token 进行登录校验,那么这个就可以不用配置

配置项类型描述
secretKeystring1234567890密钥
expireint1200过期时间,单位是 秒

7. casbin 模块

casbin 模块只用于管理后台,如果不是管理后台,那么这个就可以不用配置

配置项类型描述
modePathstringRBAC 的模型配置文件地址
dbNamestring-当你使用了多个数据库时,需要指定一个数据库名,只有一个时,可以忽略这个配置

8. oss 模块

有图片上传的业务逻辑才需要进行这个配置

配置项类型描述
typestring上传类型,目前只支持 localqiniu
savePathstring./static/storage/attach/你要存储的路径,当 typelocal 时必须以 ./static 开头
urlstring你图片的访问地址,一般不建议把图片的 URL 写入到数据库中,接口返回时最好通过这个组装
accessKeystring
secretKeystring
bucketNamestring

基于 MIT 许可发布