Loading settings from a file to a dictionary
Pointless locking

You lock in two places:


When loading the configuration file, during construction. This lock will never be contested: no two threads will ever wait on this lock, because every object has its own, different, private lock
When getting a value from the dictionary. This lock may be contested in theory by multiple threads trying to get values, but there is no reason to lock for that. It would simply slow down high throughput of requests, with no benefits


You can safely remove the locking completely.

Exception handling

loadSettings catches exceptions during file loading, logs and returns a boolean. It would be simpler to not catch exceptions here, let them be thrown, and return void. 

Since an instance of this class is unusable if an error happens during file loading, consider not catching any exceptions at all, let them be thrown, and let the caller handle the situation.

That will also allow you to remove the null check in the getSetting method, as the dictionary will never be null. Which is nice, as it's always easier to understand a class when you know it can never be in an invalid state.

Further improving loadSettings

Clearing the settings dictionary in this method is pointless. It would be better to create the dictionary here and return it.