Go-Spring 入门篇(四)
序言
上章 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 协议》,转载必须注明作者和本文链接