これを実行する方法はたくさんあります。 I'll just quote the official documentation:
SpringApplication
はApplicationListener
sおよびコンテキストや環境へのカスタマイズを適用するために使用されているApplicationContextInitializer
秒を持っています。 Springブートは、内部で使用するための多数のカスタマイズを、META-INF/spring.factories
からロードします。追加のものを登録するには複数の方法があります:
- プログラムでアプリケーションごとのあなたはそれを実行する前に
SpringApplication
上addListeners
とaddInitializers
メソッドを呼び出すことによって。
- アプリケーションごとに宣言的に
context.initializer.classes
またはcontext.listener.classes
を設定してください。
META-INF/spring.factories
を追加し、アプリケーションがすべてライブラリとして使用するjarファイルをパッケージ化することによって、宣言的にすべてのアプリケーションを対象とします。
SpringApplication
は、(コンテキストが作成されていても、いくつかの前に)リスナーにいくつかの特別なApplicationEvents
を送信し、その後、同様のApplicationContextによって公開されたイベントのリスナーを登録します。完全なリストについては、「Spring起動機能」セクションのSection 23.4, “Application events and listeners”を参照してください。
EnvironmentPostProcessor
を使用してアプリケーションコンテキストをリフレッシュする前にEnvironment
をカスタマイズすることもできます。各実装はMETA-INF/spring.factories
に登録する必要があります。
org.springframework.boot.env.EnvironmentPostProcessor=com.example.YourEnvironmentPostProcessor
私のやり方がApplicationEnvironmentPreparedEventリスナーを追加するために常にだった:
public class IntegrationTestBootstrapApplicationListener implements
ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {
public static final int DEFAULT_ORDER = Ordered.HIGHEST_PRECEDENCE + 4;
public static final String PROPERTY_SOURCE_NAME = "integrationTestProps";
private int order = DEFAULT_ORDER;
public void setOrder(int order) {
this.order = order;
}
@Override
public int getOrder() {
return this.order;
}
@Override
public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
ConfigurableEnvironment environment = event.getEnvironment();
if (!environment.getPropertySources().contains(PROPERTY_SOURCE_NAME)) {
Map<String, Object> properties = ...; // generate the values
// use whatever precedence you want - first, last, before, after
environment.getPropertySources().addLast(
new MapPropertySource(PROPERTY_SOURCE_NAME, properties));
}
}
}
をしかし、あなたは同じように簡単に初期化子を使用することができます。
public class IntegrationTestBootstrapApplicationListener implements
ApplicationContextInitializer<ConfigurableApplicationContext> {
private static final String PROPERTY_SOURCE_NAME = "integrationTestProps";
@Override
public void initialize(final ConfigurableApplicationContext applicationContext) {
ConfigurableEnvironment environment = applicationContext.getEnvironment();
Map<String, Object> properties = ...; // generate the values
// use whatever precedence you want - first, last, before, after
environment.getPropertySources().addLast(
new MapPropertySource(PROPERTY_SOURCE_NAME, properties));
}
}
あなたのイニシャライザを検出するためにspringを記述することはできますか?このクラスはどこで使用されていますか? –
引用されたテキストにはすでに説明があります。詳細は箇条書きのリストを参照してください。 –