Skip to content

2.3.2 配置管理 配置文件热更新后问题 #29

Open
@cyj19

Description

@cyj19

配置文件热更新后,对于某些已使用的地方是无效的
main.go

       //  对于以下变量即使global.ServerSetting发生变化也是不会更新的
	gin.SetMode(global.ServerSetting.RunMode)

	router := routers.NewRouter()
	s := &http.Server{
		Addr:           ":" + global.ServerSetting.HttpPort,
		Handler:        router,
		ReadTimeout:    global.ServerSetting.ReadTimeout,
		WriteTimeout:   global.ServerSetting.WriteTimeout,
		MaxHeaderBytes: 1 << 20,
	}
       ...

router.go

        ...
        //  因为超时中间件参数是值传递,所以即使global.AppSetting.DefaultContextTimeout发生改变,该中间件还是只会使用首次注册时的参数值
	r.Use(middleware.ContextTimeout(global.AppSetting.DefaultContextTimeout))

解决:
修改context_timeout.go
ContextTimeout的值传递改为引用传递

func ContextTimeout(d *time.Duration) gin.HandlerFunc {
	return func(c *gin.Context) {
		ctx, cancel := context.WithTimeout(c.Request.Context(), *d)
                defer cancel()

		c.Request = c.Request.WithContext(ctx)
		c.Next()
	}
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions