#!/usr/bin/env bash # Side by side: what the binder produced and what @Value produced, from one running process. set -euo pipefail cd "$(dirname "$0")/.." source scripts/env.sh { echo "== @ConfigurationProperties vs @Value, same application, same application.yaml ==" echo scripts/run.sh > /dev/null echo "\$ curl -s localhost:8080/diag/bound" curl -s "http://127.0.0.1:${APP_PORT}/diag/bound" | python3 -m json.tool echo echo "demo.mail.recipients is a YAML block list. The binder produced both elements." echo "@Value produced an empty list -- placeholder resolution has no concept of a YAML" echo "sequence, so \${demo.mail.recipients:} fell through to its own empty default." echo echo "== the same list written as a comma-separated string, at higher precedence ==" scripts/run.sh "" --demo.mail.recipients=x@e.com,y@e.com,z@e.com > /dev/null echo "\$ ./scripts/run.sh \"\" --demo.mail.recipients=x@e.com,y@e.com,z@e.com" curl -s "http://127.0.0.1:${APP_PORT}/diag/bound" \ | python3 -c 'import json,sys; d=json.load(sys.stdin); print(" binder :", d["mail"]["recipients"]); print(" @Value :", d["fromValueAnnotation"]["recipients"])' echo echo "Both see it. A comma-separated string is the one list shape @Value understands, and" echo "the command-line source outranks the YAML file for the binder as well." echo echo "== where did that value come from? ==" echo "\$ curl -s 'localhost:8080/diag/origin?name=demo.mail.recipients'" curl -s "http://127.0.0.1:${APP_PORT}/diag/origin?name=demo.mail.recipients" | python3 -m json.tool echo echo "\$ curl -s 'localhost:8080/diag/origin?name=demo.mail.host'" curl -s "http://127.0.0.1:${APP_PORT}/diag/origin?name=demo.mail.host" | python3 -m json.tool scripts/stop.sh } > docs/output/03-value-vs-binding.txt 2>&1 cat docs/output/03-value-vs-binding.txt