SpringBoot---系統啟動載入實現的幾種方法
阿新 • • 發佈:2018-12-04
1.CommandLineRunner
通過實現介面 CommandLineRunner 來實現,來完成專案啟動就載入所需要的資源。
import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; @Component public class MyProjectRunner implements CommandLineRunner { @Override public void run(String... args) throws Exception { //TODO 業務邏輯 } }
多個 CommandLineRunner介面的例項,如果想改變他們的執行順序可以在實現類上加入 @Order註解
@Order(value=2)
2.ApplicationRunner
通過實現介面 ApplicationRunner來實現,來完成專案啟動就載入所需要的資源。
import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; import java.util.Arrays; @Component public class MyApplicationRunner implements ApplicationRunner{ @Override public void run(ApplicationArguments args) throws Exception { System.out.println("===MyApplicationRunner==="+ Arrays.asList(args.getSourceArgs())); System.out.println("===getOptionNames========"+args.getOptionNames()); System.out.println("===getOptionValues======="+args.getOptionValues("foo")); System.out.println("==getOptionValues========"+args.getOptionValues("developer.name")); } }
3.在過濾器(Filter)和 監聽器(Listener)中載入初始化
Filter
import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.annotation.WebFilter; /** * 使用註解標註過濾器 * @WebFilter將一個實現了javax.servlet.Filter介面的類定義為過濾器 * 屬性filterName宣告過濾器的名稱,可選 * 屬性urlPatterns指定要過濾 的URL模式,也可使用屬性value來宣告.(指定要過濾的URL模式是必選屬性) */ @WebFilter(filterName="myFilter",urlPatterns="/*") public class MyFilter implements Filter { @Override public void destroy() { System.out.println("過濾器銷燬"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("執行過濾操作"); chain.doFilter(request, response); } @Override public void init(FilterConfig config) throws ServletException { System.out.println("過濾器初始化"); } }
ServletContext監聽器(Listener)檔案
使用@WebListener註解,實現ServletContextListener介面
@WebListener
public class MyServletContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("ServletContex初始化");
System.out.println(sce.getServletContext().getServerInfo());
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("ServletContex銷燬");
}
}
監聽Session的建立與銷燬
@WebListener
public class MyHttpSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent se) {
System.out.println("Session 被建立");
}
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.println("ServletContex初始化");
}
}
在啟動主類上加入@ServletComponentScan 註解
4.在SpringBoot主啟動類中巢狀載入初始操作程式碼
@SpringBootApplication
@EntityScan("com.xx.entity")
@EnableTransactionManagement
@EnableCaching
//@EnableAsync //開啟非同步
public class MaobcMain implements WebMvcConfigurer {
private static final Logger logger= LoggerFactory.getLogger(MaobcMain.class);
public static void main(String[] args) {
ConfigurableApplicationContext run = SpringApplication.run(MaobcMain.class, args);
String[] activeProfiles = run.getEnvironment().getActiveProfiles();
Arrays.stream(activeProfiles).forEach(profile ->logger.warn("Spring Boot 使用profile為:{}",profile));
SystemInit.init();
}
}
public class SystemInit {
/** 記錄使用者每次請求時間:key為userId,value為請求時間毫秒值 */
private static Map<String, Object> requestTime = new HashMap<String, Object>();
public static Map<String, Object> getRequestTime() {
return requestTime;
}
/**
* 系統初始化
*/
public static void init() {
//清空本地使用者登陸資訊快取
RedisUtils.delete(ERedisDomain.TOKEN_LOGIN_USER);
//初始化ES連線池
ESUtils.initClient();
//啟動系統主執行緒
SystemThread thread = new SystemThread();
thread.setDaemon(true);
thread.start();
}
}