I believe this would mean an app breaks if any config settings are added, or if people use intermediate settings; for example say there's an url setting, one might do this:

```
host="example.com"
port="8888"
url="http://"${host}":"${port}
```

That would allow you to do -Dhost= or -Dport= on the command line. Just a made-up example of intermediate values.

Also the error message here isn't great since you don't know which settings are extra or missing. So I think I'd probably write code which assembled a list of all missing settings; assembled a list of all extra settings; and ONLY if any are missing, say "Settings ${missing} are not found, did find extra settings ${extras}". The extras are listed because it's likely the missing settings are due to a typo, so "Settings foo,bar are missing, did find extra settings goo,baz"