ServletContextListener是servlet容器中的一个API接口, 它用来监听ServletContext的生命周期,也就是相当于用来监听Web应用的生命周期。
使用配置如下
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.servlet.annotation.WebListener;
@WebListener
@Component
@Slf4j
public class DateServer implements ServletContextListener{
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
log.info("liting: contextDestroyed");
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
log.info("liting: contextInitialized");
}
}
需要在启动类中增加@ServletComponentScan 注解
@ServletComponentScan
@SpringBootApplication
public class Application {
public static void main(String[] args) {
SpringApplication.run(AnranpslsApplication.class, args);
}
}
但是使用中可能会出现idea内置tomcat启动成功,配置外部tomcat启动时报错,或打包war部署到外部tomcat后启动成功,访问不了程序。项目中我改用了实现ApplicationRunner 接口实现 tomcat启动时应用程序。
代码如下:
@Slf4j
@Component
@Order(value = 1)
public class MyServletContextListener implements ApplicationRunner {
@Resource
public FaceRecognitionService faceRecognitionService;
//实际需要上的静态属性
public static FaceRecognitionService sFaceRecognitionService;
@PostConstruct
public void init() {
sFaceRecognitionService = this.faceRecognitionService;
}
@Override
public void run(ApplicationArguments args) throws Exception {
log.info("应用程序启动");
}
}
通过实现run方法实现要操作的方法。
说明@Order(value=1) 配置启动顺序,数字越小启动优先级越高。