I think the trick is to just use one property place holder and I think this covers all of your scenarios:
It resolves ${full.url}
in this way:
- first default.properties gets loaded =>
full.url=http://prod:9090
- then dev-test.properties overrides the hostname and port name =>
full.url=http://test:8080
- then development properties overrides the hostname only =>
full.url=http://localhost:8080