1 Star 1 Fork 2

kristas / booting-go

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
boot.go 2.85 KB
一键复制 编辑 原始数据 按行查看 历史
kristas 提交于 2021-05-13 19:01 . refactor: refactor api controller
package framework
import (
"flag"
"gitee.com/kristas/booting-go/framework/banners"
"gitee.com/kristas/booting-go/framework/common/util/list"
"gitee.com/kristas/booting-go/framework/core/bean"
. "gitee.com/kristas/booting-go/framework/core/bean_factory"
"gitee.com/kristas/booting-go/framework/core/configure"
"gitee.com/kristas/booting-go/framework/core/processor"
"gitee.com/kristas/booting-go/framework/data/datasource_processor"
"gitee.com/kristas/booting-go/framework/logging"
_ "gitee.com/kristas/booting-go/framework/logging/logrus" //引入默认logrus实现
"gitee.com/kristas/booting-go/framework/web/web_processor"
"reflect"
"time"
)
var (
components bean.Components
Environment string
port int
Host string
OpenBrowser bool
processors []processor.Processor
startTime time.Time
)
type application struct {
Log logging.Logger `bean:"log"`
Server ServerConfigure `value:"server"`
}
type ServerConfigure struct {
Port int `yaml:"port"`
}
func (s *ServerConfigure) Prefix() string {
return "server"
}
func init() {
banners.PrintBanners()
startTime = time.Now()
initFlag()
configure.LoadLocalFileConfig(Environment)
Add("log", logging.GetLog())
AddProcessor(
new(processor.CreateBeanProcessor),
new(processor.AutoConfigureProcessor),
new(processor.BeforeInitProcessor),
new(processor.BeanInitProcessor),
new(datasource_processor.DatasourceProcessor),
new(datasource_processor.DatasourceInjectProcessor),
)
}
func initFlag() {
flag.StringVar(&Environment, "env", "local", "local,dev,test,prod...")
flag.StringVar(&Host, "h", "http://localhost", "local,dev,test,prod...")
flag.IntVar(&port, "p", 0, "the port your server listen at.")
flag.BoolVar(&OpenBrowser, "bs", false, "open browser after server start")
flag.Parse()
}
func Application() *application {
app := new(application)
configure.InjectStructure(app)
Autowired(app)
return app
}
func (r *application) Run() {
r.Log.Infof("active environment: %s", Environment)
AddProcessor(new(processor.AfterInitProcessor))
r.doProcessors()
r.Log.Infof("framework boot up successed in %v", time.Since(startTime))
startWeb()
}
func Component(c ...bean.Bean) {
for i := range c {
if isBeanExists(c[i]) {
continue
}
components = append(components, c[i])
}
}
func isBeanExists(b bean.Bean) bool {
_, ok := list.NewList(components).FindBy(func(i int) bool {
return bean.GetBeanName(components[i]) == bean.GetBeanName(b)
})
return ok
}
func AddProcessor(processor ...processor.Processor) {
processors = append(processors, processor...)
}
func (r *application) doProcessors() {
for i := range processors {
proc := processors[i]
r.Log.Debugf("[%d/%d] run processor [%s]", i+1, len(processors), reflect.TypeOf(proc).String())
processor.Run(proc, components...)
}
}
func startWeb() {
w := new(web_processor.WebContainerProcessor)
processor.Run(w, components...)
}
Go
1
https://gitee.com/kristas/booting-go.git
git@gitee.com:kristas/booting-go.git
kristas
booting-go
booting-go
v1.3.1

搜索帮助