Spring Cloud Config サーバーを次のように構成しました。
@SpringBootApplication
@EnableAutoConfiguration
@EnableConfigServer
public class ConfigServer {
public static void main(String[] args) {
SpringApplication.run(ConfigServer.class, args);
}
}
「ネイティブ」プロファイルを使用しているため、プロパティはファイル システムから取得されます。
server.port=8888
spring.profiles.active=native
spring.cloud.config.server.native.search-locations: classpath:/global
ここで注意が必要なのは、一部のプロパティに環境変数が含まれていることです。「global/application-production.properties」のプロパティは次のように構成されています。
test=${DOCKER_HOST}
Config Server を起動すると、すべて正常に動作します。ただし、http://localhost:8888/testapp/productionにアクセスすると、次のように表示されます。
{
name: "testapp",
profiles: [
"production"
],
label: null,
version: null,
propertySources: [
{
name: "classpath:/global/application-production.properties",
source: {
test: "${DOCKER_HOST}"
}
}
]
}
したがって、ENV 変数の値は ${DOCKER_HOST} put を置き換えるのではなく、そのまま返されます。
しかし、http://localhost:8888/application-production.propertiesにアクセスすると、結果は JSON ではなくプレーンテキストになります。
test: tcp://192.168.99.100:2376
春のドキュメントは言う:
YAML およびプロパティ表現には、ソース ドキュメント内のプレースホルダーを標準の Spring ${… } 形式で、可能な場合はレンダリング前に出力で解決する必要があることを通知する追加のフラグ (ブール値のクエリ パラメーター resolvePlaceholders として提供) があります。これは、Spring のプレースホルダー規則について知らない消費者にとって便利な機能です。
何らかの理由でresolvePlaceholdersが JSON 表現に対して機能しないため、サーバー構成クライアントはサーバーで構成されたすべての ENV 変数を認識する必要があります。
プレーンテキスト (プロパティ) 表現と同じ方法でJSON 表現の resolvePlaceholdersを強制することは可能ですか?