0

I have application with spring mvc annotation configuration. In my local environment(IDE) it is working perfectly. When i deployed in prod(tomcat 8.5) my application listener calling multiple times. Because of this my executor tasks, schedulers calling multiple times.

AppWebAppInitializer.java

package com.app.config;

public class AppWebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(AppMvcConfig.class);
        servletContext.addListener(new ContextLoaderListener(ctx));
        ServletRegistration.Dynamic dispatcher = servletContext.addServlet("appServlet",new DispatcherServlet(ctx));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/*");
        dispatcher.setAsyncSupported(true);
        servletContext.setSessionTrackingModes(EnumSet.of(SessionTrackingMode.COOKIE)); //uses cookies instead of jsessionId in the url.

    }
}

AppMvcConfig.java

package com.app.config;

@Configuration
@EnableWebMvc
@EnableScheduling
@EnableCaching
@ComponentScan("com.app")
@Import({
        AppPropertyInitConfig.class,
        AppSecurityConfig.class,
        WebSocketConfig.class
})
public class AppMvcConfig  extends WebMvcConfigurerAdapter implements ApplicationContextAware{

    private ApplicationContext applicationContext;


    @Value("${app.upload.dir}")
    private String uploadDir;

    public void setApplicationContext(ApplicationContext applicationContext) {
        this.applicationContext = applicationContext;
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

}

ApplicationStartupListener.java

package com.app.listener;

@Component
public class ApplicationStartupListener {

    private final Logger logger = LoggerFactory.getLogger(ApplicationStartupListener.class);

    @Autowired
    private LookupHolder lookupHolder;

    @EventListener
   public void handleContextRefreshEvent(ContextRefreshedEvent event) {
        logger.info("ApplicationStartupListener initializing lookups");

        Runnable lookupInitRunnable = () -> lookupHolder.init(); //initialize the lookups
        new Thread(lookupInitRunnable).start();

   }
}

In above code ApplicationStartupListener.java --> handleContextRefreshEvent() calling multiple times. As well as my spring default schedules also calling multiple times

In my application i don't have web.xml

user_27
  • 201
  • 7
  • 19

0 Answers0