Skip to content

配置文件

VEF Framework 使用 YAML 格式的配置文件,支持多环境配置。

配置文件位置

project/
├── config/
│   ├── config.yaml          # 默认配置
│   ├── config.dev.yaml      # 开发环境
│   ├── config.test.yaml     # 测试环境
│   └── config.prod.yaml     # 生产环境

完整配置示例

yaml
# config.yaml
app:
  name: "my-app"
  version: "1.0.0"
  env: "development"
  debug: true

server:
  host: "0.0.0.0"
  port: 8080
  readTimeout: 30s
  writeTimeout: 30s
  idleTimeout: 120s

database:
  driver: "mysql"
  host: "localhost"
  port: 3306
  database: "myapp"
  username: "root"
  password: "password"
  charset: "utf8mb4"
  maxIdleConns: 10
  maxOpenConns: 100
  connMaxLifetime: 1h
  logLevel: "info"

redis:
  host: "localhost"
  port: 6379
  password: ""
  db: 0
  poolSize: 10

auth:
  jwt:
    secret: "your-secret-key-change-in-production"
    expiration: 24h
    refreshExpiration: 168h
    issuer: "my-app"

log:
  level: "info"
  format: "json"
  output: "stdout"
  file:
    enabled: false
    path: "logs/app.log"
    maxSize: 100
    maxBackups: 3
    maxAge: 7

配置项说明

应用配置

配置项类型默认值说明
app.namestring-应用名称
app.versionstring-应用版本
app.envstringdevelopment运行环境
app.debugboolfalse调试模式

服务器配置

配置项类型默认值说明
server.hoststring0.0.0.0监听地址
server.portint8080监听端口
server.readTimeoutduration30s读取超时
server.writeTimeoutduration30s写入超时
server.idleTimeoutduration120s空闲超时

数据库配置

配置项类型默认值说明
database.driverstringmysql数据库驱动
database.hoststringlocalhost数据库主机
database.portint3306数据库端口
database.databasestring-数据库名
database.usernamestring-用户名
database.passwordstring-密码
database.charsetstringutf8mb4字符集
database.maxIdleConnsint10最大空闲连接数
database.maxOpenConnsint100最大打开连接数
database.connMaxLifetimeduration1h连接最大生命周期
database.logLevelstringinfo日志级别

Redis 配置

配置项类型默认值说明
redis.hoststringlocalhostRedis 主机
redis.portint6379Redis 端口
redis.passwordstring-Redis 密码
redis.dbint0数据库索引
redis.poolSizeint10连接池大小

认证配置

配置项类型默认值说明
auth.jwt.secretstring-JWT 密钥
auth.jwt.expirationduration24hToken 过期时间
auth.jwt.refreshExpirationduration168h刷新 Token 过期时间
auth.jwt.issuerstring-Token 签发者

日志配置

配置项类型默认值说明
log.levelstringinfo日志级别
log.formatstringjson日志格式
log.outputstringstdout输出目标
log.file.enabledboolfalse启用文件日志
log.file.pathstring-日志文件路径
log.file.maxSizeint100单文件最大大小(MB)
log.file.maxBackupsint3最大备份数
log.file.maxAgeint7最大保留天数

多环境配置

环境特定配置

yaml
# config.prod.yaml
app:
  env: "production"
  debug: false

database:
  host: "db.production.internal"
  maxOpenConns: 200

log:
  level: "warn"
  file:
    enabled: true
    path: "/var/log/app/app.log"

加载配置

go
import "github.com/ilxqx/vef-framework-go/config"

// Load configuration based on VEF_APP_ENV
cfg, err := config.Load()
if err != nil {
    log.Fatal(err)
}

// Access configuration
dbHost := cfg.Database.Host
jwtSecret := cfg.Auth.JWT.Secret

自定义配置

扩展配置结构

go
package config

import "github.com/ilxqx/vef-framework-go/config"

type AppConfig struct {
    config.Config
    
    // Custom configuration
    Payment PaymentConfig `yaml:"payment"`
    SMS     SMSConfig     `yaml:"sms"`
}

type PaymentConfig struct {
    Provider  string `yaml:"provider"`
    AppId     string `yaml:"appId"`
    AppSecret string `yaml:"appSecret"`
}

type SMSConfig struct {
    Provider string `yaml:"provider"`
    ApiKey   string `yaml:"apiKey"`
}

使用自定义配置

yaml
# config.yaml
payment:
  provider: "alipay"
  appId: "your-app-id"
  appSecret: "your-app-secret"

sms:
  provider: "aliyun"
  apiKey: "your-api-key"
go
// Load custom configuration
var cfg AppConfig
if err := config.LoadInto(&cfg); err != nil {
    log.Fatal(err)
}

// Use custom configuration
paymentProvider := cfg.Payment.Provider

下一步

基于 Apache License 2.0 许可发布