Question: I update a key value in application.conf by setting the environment variable 

```
play.http.secret.key=${?MY_SECRET_KEY}

```

But it still loads the previous value.  

After a system reboot the change takes effect.  

Is there a way to refresh the config file without rebooting?

Answer: 
Try the following:

Given in a file called *sample1.conf*:

```
a {
   b {
      c = 30
      d = ["Red", "Orange", "Green", "Blue"]
   }
}

```

If you wish to change a property be sure to change it as system property first and call invalidate caches then load again. This is also what allows you to override on the command line.

```
System.setProperty("a.b.c", "100")
ConfigFactory.invalidateCaches()
val config = ConfigFactory.load("sample1")
config.getDouble("a.b.c") should be (100.0)

```

Don't know if this would work in all scenarios. So it may or may not work with your application of choice.
AFAIK, there is no Out of the box mechanism to do such thing.
As it turns out, when you start Play through the "sbt run" command, it starts in Dev mode, creating two ClassLoaders, one for your code, and the other one for the immutable code, like libraries, dependencies, and the framework code itself. This is done this way as to provide the hot deploy feature, killing and reloading the first CL.
Because the application.conf is loaded by Play on start up, I would think that it is loaded within the fixed ClassLoader, hence no reload is possible.