Browse Source

初始化,增加SqlMap配置文件和SqlTemplate配置文件的监控更新功能,完成不重新编译程序,实时加载修改的配置文件。开发时和一些特殊需求的系统可以开启该功能

xormplus 9 years ago
parent
commit
22e5ae8b4c
1 changed files with 63 additions and 0 deletions
  1. 63 0
      fswatcher.go

+ 63 - 0
fswatcher.go

@@ -0,0 +1,63 @@
+package xorm
+
+import (
+	"strings"
+
+	"github.com/fsnotify/fsnotify"
+)
+
+func (engine *Engine) StartFSWatcher() error {
+	var err error
+	engine.watcher, err = fsnotify.NewWatcher()
+	if err != nil {
+		return err
+	}
+
+	go func() {
+		for {
+			select {
+			case event := <-engine.watcher.Events:
+				if event.Op&fsnotify.Write == fsnotify.Write {
+					if strings.HasSuffix(event.Name, engine.SqlTemplate.Extension) {
+						err = engine.reloadSqlTemplate(event.Name)
+						if err != nil {
+							engine.logger.Error(err)
+						}
+					}
+
+					if strings.HasSuffix(event.Name, engine.SqlMap.Extension) {
+						err = engine.reloadSqlMap(event.Name)
+						if err != nil {
+							engine.logger.Error(err)
+						}
+					}
+				}
+
+			case err := <-engine.watcher.Errors:
+				if err != nil {
+					engine.logger.Error(err)
+				}
+			}
+		}
+	}()
+
+	if engine.SqlMap.SqlMapRootDir != "" {
+		err = engine.watcher.Add(engine.SqlMap.SqlMapRootDir)
+		if err != nil {
+			return err
+		}
+	}
+
+	if engine.SqlTemplate.SqlTemplateRootDir != "" {
+		err = engine.watcher.Add(engine.SqlTemplate.SqlTemplateRootDir)
+		if err != nil {
+			return err
+		}
+	}
+
+	return nil
+}
+
+func (engine *Engine) StopFSWatcher() error {
+	return engine.watcher.Close()
+}