Go-Spring 入門篇(四)

李輕水發表於2021-11-30

序言

示例程式碼後續會提交到 Github 上

上章 Go-Spring 入門篇(三) 我們拆分了業務程式碼,將邏輯處理放到了 service 層,本章我們通過 spring-boot 提供強大的配置能力,來動態配置我們檔案的儲存目錄。

配置檔案

config/application.properties

# application
spring.application.name=demo

# file system
file.dir=temp

直接注入

services/upload/upload.go

type Service struct {
    Dir string `value:"${file.dir}"`
}

func (s *Service) PutObject(name string, r io.Reader, size int64) (string, error) {
    // out := path.Join("temp", name)
    out := path.Join(s.Dir, name)
    // ...
}

當然 spring-boot 也支援對結構體例項化配置資料和設定預設值。

通過結構體注入

config/filesystem.go

type FileSystem struct {
    Dir string `value:"${file.dir:=tmp}"`
}

services/filesystem/filesystem.go

type Service struct {
    Config config.FileSystem
}

執行

重新執行 go run main.go 並測試,功能正常。

$ curl -F "file=@./1.jpg" http://127.0.0.1:8080/upload
$ {"code":0,"data":{"url":"temp/1.jpg"},"msg":"上傳檔案成功"}

$ curl -F "file=@./1.jpg" http://127.0.0.1:8080/upload
$ {"code":-1,"msg":"檔案已存在,請勿重複上傳"}

框架相關

spring-boot 支援 propertiesyamltomlini 等多種格式的配置和方式,並預設配置從應用目錄下的 config 目錄中進行收集,可以通過以下兩種方式來修改預設配置目錄和配置型別。

SetEnv

// 通過 Property 函式設定配置目錄
gs.SetEnv("GO_SPRING_CONFIG_LOCATIONS", "YOUR_CONFIG_PATH")
// 通過 Property 函式設定配置檔案型別
gs.SetEnv("GS_SPRING_CONFIG_EXTENSIONS", ".properties,.prop,.yaml,.yml,.toml,.tml,.ini")

Property

// 通過 Property 函式設定配置目錄
gs.Property("GO_SPRING_CONFIG_LOCATIONS", "YOUR_CONFIG_PATH")
// 通過 Property 函式設定配置檔案型別
gs.Property("GS_SPRING_CONFIG_EXTENSIONS", ".properties,.prop,.yaml,.yml,.toml,.tml,.ini")

注:SetEnv 優先順序高與 Property。

注:GO_SPRING_CONFIG_LOCATIONS 和 GS_SPRING_CONFIG_EXTENSIONS 為框架預定義配置鍵名,後續會介紹其它的預定義配置名。

官網及交流

Go-Spring 官網
Github

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章