1. 程式人生 > >Spring Boot應用程式在啟動時執行一些操作的方法

Spring Boot應用程式在啟動時執行一些操作的方法

如果想在生成物件時候完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入,那麼就無法在建構函式中實現。為此,可以使用@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();
	}

}