配置文件
使用
github.com/spf13/viper
读取并加载了配置内容
使用
github.com/joho/godotenv
处理.env
这类型的内容
TIP
Viper 支持的多种格式的配置文件,你可以按照你的喜好使用
格式 | 文件扩展名 | 说明 |
---|---|---|
JSON | .json | 标准 JSON 格式 |
YAML/YML | .yaml , .yml | 常用于配置,支持嵌套结构 |
TOML | .toml | 用于更结构化的配置 |
HCL | .hcl | HashiCorp 的配置语言 |
INI | .ini | 传统的配置文件格式 |
envfile | .env | 类似 .env 文件,键值对 |
一般情况下,常用的是:
通过
json
或者yaml
管理所有配置,这相当于是团队内部的通用配置,新增或者修改都应该维护这个配置文件,它同时也受git
的管理通过
env
文件管理自己的配置内容,这是你自己个性化的配置,它的目的是重写json
或者yaml
中内容,并且不能受到git
的管理env
的文件名称不重要,常见的是.env
、.env.local
、.env.test
等等但要保证内容是 键值对 即可
envAPP_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 模块
配置项 | 类型 | 描述 | ||
---|---|---|---|---|
name | string | ✅ | 无 | 应用名称 |
env | string | ✅ | 无 | 当前环境,与 gin 的 EnvGinMode 保持一致,可选项有 debug 、test 、release |
addr | string | ✅ | 无 | 服务地址,可以是 ip:port ,也可以只要 :port ,当没有填写 IP 时,gooze 会自动解析当前的局域网 IP 地址 |
timeout | int | ✅ | 无 | 超时时长 |
routerPrefix | string | ✅ | 无 | 路由前缀,Casbin 中间件与 [API 代码生成] 时需要,默认 api/v1 |
2. databases 模块
是一个 数据库配置项列表(list of database configs),支持配置多个数据库连接。
配置项 | 类型 | 描述 | ||
---|---|---|---|---|
name | string | ✅ | 无 | 连接名称,这个很重要,多链接时将通过这个值获取对应的 DB |
driver | string | ✅ | 无 | 使用哪一个驱动,目前支持 MySQL 、PostgresSQL 、SQLite 、SQLServer 、Oracle |
dsn | string | ✅ | 无 | 连接信息 |
useGorm | bool | ✅ | 无 | 是否使用 gorm , 为 true 时使用的是 *gorm.DB , 为 false 时使用的是 *sqlx.DB , |
logLevel | int | ❌ | 3 | 哪些级别的日志需要记录,sqlx 不支持该参数 |
enableLogWriter | bool | ❌ | false | 是否使用 zap 日志记录数据库日志,sqlx 不支持该参数 |
maxIdleConn | int | ❌ | 10 | 最大空闲连接 |
maxConn | int | ❌ | 200 | 最大连接数 |
slowThreshold | int | ❌ | 2 | SQL 慢查询阈值(单位:秒),sqlx 不支持该参数 |
📘 logLevel 可选值:
1
:Error2
:Warn3
:Info
3. redis 模块
配置项 | 类型 | 描述 | ||
---|---|---|---|---|
addr | string | ✅ | 无 | 连接信息 |
password | string | ✅ | 无 | 密码 |
db | int | ✅ | 无 | 使用哪个库 |
isCluster | bool | ✅ | 无 | 是否集群 |
4. mongo 模块
配置项 | 类型 | 描述 | ||
---|---|---|---|---|
url | string | ✅ | 无 | 连接信息 |
5. log 模块
配置项 | 类型 | 描述 | ||
---|---|---|---|---|
path | string | ❌ | ./logs/ | 日志保存的路径 |
mode | string | ❌ | both | 文件写入的方式 |
logrotate | bool | ❌ | true | 是否开启日志轮转,由于日志是按照日期分目录的,为 true 时,会在每天晚上 24 点按照日期重新创建日志目录 |
recover | bool | ❌ | true | 是否重新创建已删除的日志文件 |
maxSize | int | ❌ | 1 | 单文件最大容量, 单位是 MB |
maxBackups | int | ❌ | 3 | 最大保留过期文件个数 |
maxAge | int | ❌ | 7 | 保留过期文件的最大时间间隔, 单位是天 |
compress | bool | ❌ | true | 是否需要压缩滚动日志, 使用的 gzip 压缩 |
📘 mode 可选值:
file
:写入文件console
:写入控制台both
:写入文件和控制台close
:关闭日志记录,不写入任何地方
logrotate 的注意点
如果你使用了 Linux 自带的 logrotate ,那么建议 Logrotate 设置为 false
recover 的注意点
zap 日志库在你项目启动后删除已经生成的日志文件,将不会自动创建文件并继续写入,但如果这个设置为 true 则会检查并重新创建文件,但有一定的性能影响
6. jwt 模块
如果 API 接口不需要使用 JWT Token 进行登录校验,那么这个就可以不用配置
配置项 | 类型 | 描述 | ||
---|---|---|---|---|
secretKey | string | ❌ | 1234567890 | 密钥 |
expire | int | ❌ | 1200 | 过期时间,单位是 秒 |
7. casbin 模块
casbin 模块只用于管理后台,如果不是管理后台,那么这个就可以不用配置
配置项 | 类型 | 描述 | ||
---|---|---|---|---|
modePath | string | ✅ | 无 | RBAC 的模型配置文件地址 |
dbName | string | - | 无 | 当你使用了多个数据库时,需要指定一个数据库名,只有一个时,可以忽略这个配置 |
8. oss 模块
有图片上传的业务逻辑才需要进行这个配置
配置项 | 类型 | 描述 | ||
---|---|---|---|---|
type | string | ✅ | 无 | 上传类型,目前只支持 local 、qiniu |
savePath | string | ❌ | ./static/storage/attach/ | 你要存储的路径,当 type 为 local 时必须以 ./static 开头 |
url | string | ✅ | 无 | 你图片的访问地址,一般不建议把图片的 URL 写入到数据库中,接口返回时最好通过这个组装 |
accessKey | string | ✅ | 无 | |
secretKey | string | ✅ | 无 | |
bucketName | string | ✅ | 无 |