8

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を強制することは可能ですか?

4

3 に答える 3

2

私は同じ問題に直面しました。Spring Cloud Config Repository を調べたところ、次のコミットが見つかりました: Omit system properties and env vars from placeholders in config

そのような動作はサポートされていないようです。

于 2017-02-16T19:28:15.590 に答える