[← IDE metadata](07-ide-metadata.md) · [Index](../README.md) # 8. Diagnosing a value Endpoint: [`BindingDiagnosticsEndpoint`](../src/main/java/com/ankurm/configprops/web/BindingDiagnosticsEndpoint.java). "The property is set but the application does not see it" is the most common configuration bug, and it is hard for one reason: a value carries no visible provenance. Spring Boot tracks it anyway — every property loaded from a file or a config tree carries an `Origin` naming the resource and the line. ``` $ curl -s 'localhost:8080/diag/origin?name=demo.mail.host' { "property": "demo.mail.host", "effectiveValue": "smtp.example.com", "candidatesInPrecedenceOrder": [ { "source": "OriginTrackedMapPropertySource {name='Config resource ... [application.yaml]'}", "value": "smtp.example.com", "origin": "class path resource [application.yaml] - 15:11" } ] } ``` Line 15, column 11. Not "somewhere in your configuration". ## How it works ```java for (ConfigurationPropertySource source : ConfigurationPropertySources.get(environment)) { ConfigurationProperty property = source.getConfigurationProperty(ConfigurationPropertyName.of(name)); if (property != null) { // property.getValue(), property.getOrigin(), source.getUnderlyingSource() } } ``` Iterating `ConfigurationPropertySources.get(...)` gives you the sources in precedence order. The first hit is the winner; everything after it exists and lost. A property with several holders is exactly what "my change had no effect" looks like from the inside — and the [profiles project](../../profiles-and-config) is entirely about that case. ## Delete it before shipping This endpoint prints whatever a mounted secret contains. If you want it permanently, put it behind the management port and authentication, or use Actuator's `/actuator/env`, which does the same job with sanitisation built in. ## Without an endpoint - `--debug` prints the auto-configuration report, not property origins. - Setting `logging.level.org.springframework.boot.context.config=TRACE` logs which config data resources were loaded, in order — useful when the question is "was my file read at all". - In a test, inject `Environment` and inspect `getPropertySources()` directly.