Like with anything, you will not know if you are going to be good at it until you spend a lot of time trying and failing and learning. If you enjoy it, just keep doing it.
Like with anything, you will not know if you are going to be good at it until you spend a lot of time trying and failing and learning. If you enjoy it, just keep doing it.
Spring combines combinations of environment variables, system properties, files, and classpath resources, and handles a variety of patterns (e.g.: aConfigOption could be configured by system property A_CONFIG_OPTION
, aConfigOption
, or several other possibilities), so tracking down where the configuration came from is not always easy. Sometimes you think you can just set a property, but it turns out another property triggers loading a resource that overrides yours. This would be fine if applications/libraries clearly documented how to configure them, but most say “config via spring, good luck lol”.
And good luck if you are trying to use two different components both built on Spring, and they both rely on the dependency injector settings “db.url”. Now you have to start playing games with dependency injector scopes.
While you are mastering Spring, I am mastering libraries that do the thing my program needs to do.
While you are trying to debug to your Spring app, which is a huge PITA because Spring is a rat’s nest of conflicting configuration paradigms and overlays and fills your call stack with dozens of layers of generated methods, I have finished my work and am at the beach helping my coworker debug his Spring app because he didn’t listen to me when I said not to use Spring.
Two rules:
BMW: 40 in town, 90 on the expressway, 80 on the twisty roads, 70 on the on ramps.
Nissan: 60 in town, 100 on the expressway, 40 on the twisty roads, 12 on the on ramps.