跳转至

环境变量

rk-boot 会可以根据 DOMAIN 环境变量区分不同的环境。

概述#

让我们考虑如下的场景,我们需要在【test】和【prod】两个环境的服务器中,使用不同的配置文件,比如数据库配置文件等等。

因为 rk-boot 支持多个 ConfigEntry,我们需要一个机制来分辨不同的 ConfigEntry.

注意,为了代码的整洁性,不同的 ConfigEntry 会用同样的名字,这样一来,对于代码来说,才可以做到与环境无关。

概念#

Entry 是如何被 rk-boot 筛选?

rk-boot 会使用 DOMAIN 环境变量来区分不同的环境。这也是 RK 推荐的云原生环境分辨法。

快速开始#

1.安装#

$ go get github.com/rookie-ninja/rk-boot/v2
$ go get github.com/rookie-ninja/rk-grpc/v2

2.创建配置文件#

config/test.yaml

---
value: test

config/prod.yaml

---
value: prod

config/default.yaml

---
value: default

3.创建 boot.yaml#

config:
  - name: my-config
    domain: "test"
    path: "config/test.yaml"
  - name: my-config
    domain: "prod"
    path: "config/prod.yaml"
  - name: my-config
    domain: "*"
    path: "config/default.yaml"
grpc:
  - name: greeter
    port: 8080
#   gwPort: 8081                  # 可选项,如果不指定,会使用与 port 一样的端口
    enabled: true

4.环境变量:DOMAIN=test#

package main

import (
  "context"
  "fmt"
  "github.com/rookie-ninja/rk-boot/v2"
  "github.com/rookie-ninja/rk-entry/v2/entry"
  "os"
)

func main() {
  os.Setenv("DOMAIN", "test")

  // Create a new boot instance.
  boot := rkboot.NewBoot()

  fmt.Println(rkentry.GlobalAppCtx.GetConfigEntry("my-config").GetString("value"))

  // Bootstrap
  boot.Bootstrap(context.TODO())

  boot.WaitForShutdownSig(context.TODO())
}

输出

test

5.无环境变量#

package main

import (
  "context"
  "fmt"
  "github.com/rookie-ninja/rk-boot/v2"
  "github.com/rookie-ninja/rk-entry/v2/entry"
  "os"
)

func main() {
  // Create a new boot instance.
  boot := rkboot.NewBoot()

  fmt.Println(rkentry.GlobalAppCtx.GetConfigEntry("my-config").GetString("value"))

  // Bootstrap
  boot.Bootstrap(context.TODO())

  boot.WaitForShutdownSig(context.TODO())
}

输出

default

Cheers#