@TargetSE(valueSE=METHODSE) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE public @interface DynamicPropertySource
Environment
の PropertySources
のセットに追加する必要がある統合テストのメソッドレベルのアノテーション。 このアノテーションとそのサポートインフラストラクチャは、もともと Testcontainers ベースのテストのプロパティを Spring 統合テストに簡単に公開できるように設計されていました。ただし、この機能は、ライフサイクルがテストの ApplicationContext
の外部で維持される任意の形式の外部リソースでも使用できます。
@DynamicPropertySource
でアノテーションが付けられたメソッドは static
である必要があり、Environment
の PropertySources
のセットに名前と値のペアを追加するために使用される単一の DynamicPropertyRegistry
引数が必要です。値は動的であり、プロパティが解決されたときにのみ呼び出される Supplier
SE を介して提供されます。通常、メソッド参照は、次の例のように、値を提供するために使用されます。
動的プロパティは、@TestPropertySource
から読み込まれたプロパティ、オペレーティングシステムの環境、Java システムプロパティ、またはアプリケーションによって宣言的に @PropertySource
を使用して、またはプログラムで追加されたプロパティソースよりも優先されます。動的プロパティを使用して、@TestPropertySource
、システムプロパティソース、およびアプリケーションプロパティソースを介してロードされたプロパティを選択的にオーバーライドできます。
@SpringJUnitConfig(...) @Testcontainers class ExampleIntegrationTests { @Container static RedisContainer redis = new RedisContainer(); // ... @DynamicPropertySource static void redisProperties(DynamicPropertyRegistry registry) { registry.add("redis.host", redis::getContainerIpAddress); registry.add("redis.port", redis::getMappedPort); } }
DynamicPropertyRegistry
, ContextConfiguration
, TestPropertySource
, PropertySource