前端后端四川seo整站優(yōu)化
在項目開發(fā)中某些場景必須要用到啟動項目后立即執(zhí)行方式的功能,如我們需要去初始化數(shù)據(jù)到
redis
緩存,或者啟動后讀取相應的字典配置等,這篇文章主要聊聊實現(xiàn)立即執(zhí)行的幾種方法。
一、CommandLineRunner
和ApplicationRunner
這兩者的實現(xiàn)方法一樣,都是去繼承相應的接口然后重寫run
方法即可,也都是SpringBoot
框架所提供給我們的接口,也是項目中最常用的,比較靈活,有多個CommandLineRunner
或ApplicationRunner
實現(xiàn)類時可以通過@Order
注解或?qū)崿F(xiàn)Ordered
接口重寫getOrder
方法實現(xiàn)按指定順序執(zhí)行
1. CommandLineRunner
的實現(xiàn)
java
復制代碼
import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @Component public class CommandLineRunnerImpl implements CommandLineRunner { @Override public void run(String... args) throws Exception { System.out.println("CommandLineRunnerImpl方法執(zhí)行"); } }
2. ApplicationRunner
的實現(xiàn)
java
復制代碼
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @Component public class ApplicationRunnerImpl implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("ApplicationRunner方法執(zhí)行"); }
3. 多個CommandLineRunner
或ApplicationRunner
實現(xiàn)類時指定順序執(zhí)行
通過@Order
注解指定,數(shù)字越小越先執(zhí)行
java
復制代碼
@Component @Order(1) //通過order注解指定 public class ApplicationRunnerImpl implements ApplicationRunner { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("ApplicationRunner方法執(zhí)行"); } }
通過實現(xiàn)Ordered
接口并重寫getOrder
方法實現(xiàn),數(shù)字越小越先執(zhí)行
java
復制代碼
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.core.Ordered; import org.springframework.stereotype.Component; @Component public class ApplicationRunnerImpl implements ApplicationRunner, Ordered { @Override public void run(ApplicationArguments args) throws Exception { System.out.println("ApplicationRunner方法執(zhí)行"); } @Override public int getOrder() { return 1; } }
CommandLineRunner
或ApplicationRunner
的不同
這兩者的不同其實就是run
方法中所接收的參數(shù)類型不同,CommandLineRunner
是對我們啟動jar
包時所傳參數(shù)不進行處理,原樣返回String
類型給你,ApplicationRunner
是封裝成了ApplicationArguments
參數(shù),通過這個類型可以更方便的判斷某些參數(shù)是否存在之類的。
二、JDK
所提供的@PostConstruct
@PostConstruct
是JDK
所提供的注解,使用該注解的方法會在服務器加載Servlet
的時候運行。也可以在一個類中寫多個方法并添加這個注解。
java
復制代碼
import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; @Component public class PostConstructTest { @PostConstruct public void start() { System.out.println("@PostConstruct方法執(zhí)行"); } @PostConstruct public void start01() { System.out.println("@PostConstruct1111方法執(zhí)行"); } }
三、其他方法(不常用)
1. ApplicationContextAware
java
復制代碼
import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; @Component public class ApplicationContextAwareImpl implements ApplicationContextAware { @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { System.out.println("ApplicationContextAwareImpl方法執(zhí)行"); } }
2. ApplicationListener
(會執(zhí)行多次)
java
復制代碼
import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationListener; import org.springframework.stereotype.Component; @Component public class ApplicationListenerImpl implements ApplicationListener { @Override public void onApplicationEvent(ApplicationEvent event) { System.out.println("ApplicationListenerImpl方法執(zhí)行"); } }
3. InitializingBean
java
復制代碼
import org.springframework.beans.factory.InitializingBean; import org.springframework.stereotype.Component; @Component public class InitializingBeanImpl implements InitializingBean { @Override public void afterPropertiesSet() throws Exception { System.out.println("InitializingBeanImpl方法執(zhí)行"); } }
這些方法也都可以實現(xiàn)在啟動項目后立即執(zhí)行,但是不太常用。
以上就是在
SpringBoot
項目中實現(xiàn)啟動項目后立即執(zhí)行方法的幾種方式,如果都大家有幫助,記得點贊
、收藏
哦,謝謝!
作者:JK凱
鏈接:https://juejin.cn/post/7237020208647569469
來源:稀土掘金
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。