Add dynamic reading of config file support
diff --git a/README.md b/README.md
index a8915e6..681bf76 100644
--- a/README.md
+++ b/README.md
@@ -13,6 +13,7 @@
* setting defaults
* reading from JSON, TOML, and YAML config files
+* live watching and re-reading of config files (optional)
* reading from environment variables
* reading from remote config systems (Etcd or Consul), and watching changes
* reading from command line flags
@@ -78,7 +79,7 @@
Here is an example of how to use Viper to search for and read a configuration file.
None of the specific paths are required, but at least one path should be provided
-where a configuration file is expected.
+where a configuration file is expected.
```go
viper.SetConfigName("config") // name of config file (without extension)
@@ -91,6 +92,26 @@
}
```
+### Watching and re-reading config files
+
+Viper supports the ability to have your application live read a config file while running.
+
+Gone are the days of needing to restart a server to have a config take effect,
+viper powered applications can read an update to a config file while running and
+not miss a beat.
+
+Simply tell the viper instance to watchConfig.
+Optionally you can provide a function for Viper to run each time a change occurs.
+
+**Make sure you add all of the configPaths prior to calling `WatchConfig()`**
+
+```go
+ viper.WatchConfig()
+ viper.OnConfigChange(func(e fsnotify.Event) {
+ fmt.Println("Config file changed:", e.Name)
+ })
+```
+
### Reading Config from io.Reader
Viper predefines many configuration sources such as files, environment
@@ -286,15 +307,15 @@
go func(){
for {
time.Sleep(time.Second * 5) // delay after each request
-
+
// currently, only tested with etcd support
err := runtime_viper.WatchRemoteConfig()
if err != nil {
log.Errorf("unable to read remote config: %v", err)
continue
}
-
- // unmarshal new config into our runtime config struct. you can also use channel
+
+ // unmarshal new config into our runtime config struct. you can also use channel
// to implement a signal to notify the system of the changes
runtime_viper.Unmarshal(&runtime_conf)
}