序言
示例程式碼後續會提交到 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
支援 properties
、yaml
、toml
和 ini
等多種格式的配置和方式,並預設配置從應用目錄下的 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 為框架預定義配置鍵名,後續會介紹其它的預定義配置名。
官網及交流
本作品採用《CC 協議》,轉載必須註明作者和本文連結