因爲業務需要,部分功能要求在程序啓動後就去執行,SpringBoot提供了專門的接口CommandLineRunner去實現此操作。
實現方式如下面代碼片段:
import org.springframework.boot.CommandLineRunner;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
@Component
@Order(value = 1)
public class MyTestThread implements CommandLineRunner {
@Override
public void run(String... args) throws Exception {
// 執行具體業務功能
}
}
要求使用時必須要加 @Component 註解。
在有多個可被執行的業務時,通過使用 @Order 註解,設置各個線程的啓動順序(value值由小到大表示啓動順序)。
多個實現CommandLineRunner接口的類必須要設置啓動順序,不讓程序啓動會報錯!
設置啓動順序,表示一個功能的線程執行完後纔去執行下一個功能的線程,如果在前一個功能中有死循環操作,例如消費Kafka,
while (true)
{
ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
// ...
// ...
// ...
}
此操作會使該線程一直處於啓動狀態,導致後面的線程無法啓動。
希望大家可以根據實際情況,選擇合適的使用方法。