@TargetSE(valueSE=METHODSE) @RetentionSE(valueSE=RUNTIMESE) @DocumentedSE public @interface DynamicPropertySource
Environment の PropertySources のセットに追加する必要がある統合テストのメソッドレベルのアノテーション。 このアノテーションとそのサポートインフラストラクチャは、もともと Testcontainers ベースのテストのプロパティを Spring 統合テストに簡単に公開できるように設計されていました。ただし、この機能は、ライフサイクルがテストの ApplicationContext の外部で維持される任意の形式の外部リソースでも使用できます。
@DynamicPropertySource でアノテーションが付けられたメソッドは static である必要があり、Environment の PropertySources のセットに名前と値のペアを追加するために使用される単一の DynamicPropertyRegistry 引数が必要です。値は動的であり、プロパティが解決されたときにのみ呼び出される SupplierSE を介して提供されます。通常、メソッド参照は、次の例のように、値を提供するために使用されます。
動的プロパティは、@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