SpringBoot プロジェクトが開始された後、メソッドを実行するには 5 つの方法があります。
1. CommandLineRunner インターフェイスを実装する
プロジェクトが初期化されると、メソッドが呼び出され、サービスが提供されます。
@Component
public class StartInit2 implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
System.out.println("CommandLineRunner====================");
}
}
2. ApplicationRunner インターフェイスを実装する
CommandLineRunnerと同じです。パラメータの受け渡し形式のみが異なります。CommandLineRunner: 制限なし、ApplicationRunner: キーと値
@Component
public class StartInit3 implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) {
System.out.println("ApplicationRunner=================");
}
}
3. ApplicationListener インターフェースを実装する
プロジェクトが初期化されると、メソッドが呼び出され、サービスが提供されます。監視対象のイベント (通常は ApplicationStartedEvent または ApplicationReadyEvent) に注意してください。他のイベントは Bean に挿入されない場合があります。
@Component
public class StartInit4 implements ApplicationListener<ApplicationStartedEvent> {
@Override
public void onApplicationEvent(ApplicationStartedEvent event) {
System.out.println("ApplicationListener================ApplicationStartedEvent");
}
}
- イベントがリッスンされる場合
ApplicationStartedEvent
、ApplicationListener は間違いなく CommandLineRunner および ApplicationRunner の前に実行されます。 - イベントがリッスンされる場合
ApplicationReadyEvent
、ApplicationListener は CommandLineRunner と ApplicationRunner の後に必ず実行されます。
順序:
デフォルトでは、ApplicationRunner
最初に実行されます。両方の当事者が を指定した場合@Order
、@Order
実行はサイズ順に行われ、小さいものが最初に実行されます。
原理:
- SpringApplicationのrunメソッドはafterRefreshメソッドを実行します。
- afterRefresh メソッドは callRunners メソッドを実行します。
- callRunners メソッドは、ApplicationRunner インターフェイスと CommondLineRunner インターフェイスを実装するすべてのメソッドを呼び出します。callRunners メソッドは、ApplicationRunner インターフェイスと CommondLineRunner インターフェイスを実装するすべてのメソッドを呼び出します。
4. @PostConstruct アノテーション
このメソッドはプロジェクトの初期化中に呼び出されます。ビジネス ロジックの実行に時間がかかると、プロジェクトの起動に失敗する可能性があります。
@Component
public class StartInit {
@PostConstruct
public void init() {
System.out.println("@PostConstruct===============================");
}
}
5. InitializingBean インターフェースを実装する
このメソッドはプロジェクトの開始時に呼び出されます
@Component
public class StartInit6 implements InitializingBean {
@Override
public void afterPropertiesSet() {
System.out.println("InitializingBean====================");
}
}