CommandLineRunner並非Spring框架原有的概念,它屬於SpringBoot應用特定的回調擴展接口:spring
public interface CommandLineRunner { /** * Callback used to run the bean. * @param args incoming main method arguments * @throws Exception on error */ void run(String... args) throws Exception; }
關於CommandLineRunner,咱們須要關注的點有兩個:數據庫
跟其餘幾個擴展點接口類型類似,咱們建議CommandLineRunner的實現類使用@org.springframework.core.annotation.Order進行標註或者實現org.springframework.core.Ordered
接口,便於對他們的執行順序進行排序調整,這是很是有必要的,由於咱們不但願不合適的CommandLineRunner實現類阻塞了後面其餘CommandLineRunner的執行。這個接口很是有用和重要,咱們須要重點關注。緩存
在使用SpringBoot構建項目時,咱們一般有一些預先數據的加載。那麼SpringBoot提供了一個簡單的方式來實現–CommandLineRunner。框架
一、在項目服務啓動的時候就去加載一些數據到緩存或作一些事情這樣的需求。ide
CommandLineRunner是一個接口,咱們須要時,只需實現該接口就行。若是存在多個加載的數據,咱們也可使用@Order註解來排序。
案例:spa
加載數據庫數據到緩存3d
package com.transsnet.palmpay.controller; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; //@Component @Order(value = 1) public class MyStartupRunner2 implements CommandLineRunner { @Override public void run(String... strings) throws Exception { System.out.println(">>>>>>>>>>>>>>>服務啓動執行,執行加載數據等操做 MyStartupRunner2 order 1 <<<<<<<<<<<<<"); } }
實現的方式相似的,以下:code
package com.transsnet.palmpay.controller; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.CommandLineRunner; import org.springframework.core.annotation.Order; import org.springframework.stereotype.Component; @Component @Order(value = -1) public class MyStartupRunner3 implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println(">>>>>>>>>>>>>>>服務啓動執行,執行加載數據等操做 MyStartupRunner3 order -1 <<<<<<<<<<<<<"); } }