上下文在Springboot中初始化两次

时间:2018-06-01 12:21:26

标签: java spring spring-boot

因此,在我正在开发的应用程序(Spring-boot)中,我需要挖掘servlet上下文正在初始化的点。所以为此,我使用了下面的代码(请参阅注释“OLD-CODE-BELOW”之后的代码)。程序运行良好,所有事情都很好,并且在开发环境中,即在我的日食之下。

但是部署代码时,在apache tomcat服务器上使用WAR,方法contextInitialized(ServletContextEvent event)运行了两次!

(使用maven Target之后clean install文件夹中生成的war来部署应用程序。

所以,我找到了解决方案(未注释的代码)。但我从来不明白这背后的原因。

import javax.servlet.ServletContextEvent;
import javax.annotation.ManagedBean;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextListener;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebListener;

import com.utilities.DriverPool;
import org.openqa.selenium.WebDriver;
import org.springframework.boot.web.servlet.ServletContextInitializer;

import java.util.ArrayList;

@ManagedBean
public class AppContextListener implements ServletContextInitializer{

    @Override
    public void onStartup(ServletContext sc) throws ServletException {
        // TODO Auto-generated method stub
        DriverPool dPool = new DriverPool();
           ArrayList<WebDriver> driverList = dPool.createInitPool();
           sc.setAttribute("driverPool", driverList);
           System.out.println("ServletContextListener started..***************************************************");
    }

}

//-----OLD-CODE-BELOW----------//

/*@WebListener
public class AppContextListener implements ServletContextListener {

@Override
public void contextInitialized(ServletContextEvent event) {

   ServletContext sc = event.getServletContext();

   DriverPool dPool = new DriverPool();
   ArrayList<WebDriver> driverList = dPool.createInitPool();
   sc.setAttribute("driverPool", driverList);
   System.out.println("ServletContextListener started..***************************************************");
 }

@Override
public void contextDestroyed(ServletContextEvent e) {

 }
}*/

另外,我在Main类(spring-boot应用程序启动的地方)中有这个代码,我后来注释掉了。

/*@Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        super.onStartup(servletContext);
        System.out.println("in onStartup");

        servletContext.addListener(new AppContextListener()); 
        //Adds custom context listener for initialization of driver pool and other functionality
    }*/

所以,我真的很想知道为什么会这样。

PS:我对此并不是很专家,所以请原谅任何错误, AND ,如果需要,请在评论中提及其他详细信息。

非常感谢!

0 个答案:

没有答案