Spring Boot應用程式在啟動時執行一些操作的方法
阿新 • • 發佈:2018-12-20
如果想在生成物件時候完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入,那麼就無法在建構函式中實現。為此,可以使用@PostConstruct註解一個方法來完成初始化,@PostConstruct註解的方法將會在依賴注入完成後被自動呼叫。
@PostConstruct是spring框架的註解,在方法上加該註解會在專案啟動的時候執行該方法,也可以理解為在spring容器初始化的時候執行該方法。
@Service public class ServiceImpl implements ServiceI { public void taskstart() { //TODO } @PostConstruct public void init() { FutureTask<String> task = new FutureTask<String>(new Callable<String>() { @Override public String call() throws Exception { taskstart(); // 使用另一個執行緒來執行該方法 return ""; } }); new Thread(task).start(); } }
另外,Spring Boot應用程式在啟動後,會遍歷CommandLineRunner介面的例項並執行它們的run方法。也可以利用@Order註解(或者實現Order介面)來規定所有CommandLineRunner例項的執行順序。多個CommandLineRunner可以被同時執行在同一個spring上下文中並且執行順序是以order註解的引數順序一致。
@Component @Order(value = 1) public class InitStartupRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { init(); } }
如果你需要訪問ApplicationArguments去替換掉字串陣列,可以考慮使用ApplicationRunner類。
@Component
@Order(value = 2)
public class InitRunner implements ApplicationRunner {
@Override
public void run(ApplicationArguments args) throws Exception {
init();
}
}