несколько определений ContextLoader * - PullRequest
0 голосов
/ 29 мая 2018
public class SpringMVCWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

@Override
protected Class<?>[] getRootConfigClasses() {
    return new Class[] { LoginApplicationConfig.class };
}

@Override
protected Class<?>[] getServletConfigClasses() {
    return null;
}

@Override
protected String[] getServletMappings() {
    return new String[] { "/" };
}

}

public class Initializer extends AbstractHttpSessionApplicationInitializer {

   public Initializer() {
       super(Config.class); 
   }
}

Как я могу использовать и SessionManager, и AbstractAnnotationConfigDispatcherServletInitializer, не задавая несколько определений ContextLoader *?

1 Ответ

0 голосов
/ 24 октября 2018

У меня была та же проблема при работе с Spring MVC и инициализации нескольких инициализаторов.Разделили их на разные классы и пометили их Spring @ Order (значение)

Сначала будет инициализировано.AbstractAnnotationConfigDispatcherServletInitializer будет инициировать контекст приложения сервлета, а также контекст корневого приложения.

import org.springframework.core.annotation.Order;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

@Order(1)
public class Init extends AbstractAnnotationConfigDispatcherServletInitializer {
  @Override protected Class<?>[] getRootConfigClasses() {
    return new Class[]{Config.class};
  }

  @Override protected Class<?>[] getServletConfigClasses() {
    return null;
  }

  @Override protected String[] getServletMappings() {
    return new String[]{"/*"};
  }
}

Это будет помечено @Order(2) Это вторая инициализация для класса инициализации сеанса AbstractHttpSessionApplicationInitializer обеспечит, чтосервлет будет использовать springSessionRepositoryFilter для каждого запроса, который отвечает за замену реализации HttpSession пользовательской реализацией при поддержке Redis подробнее .

import org.springframework.core.annotation.Order;
import org.springframework.session.data.redis.config.annotation.web.http.EnableRedisHttpSession;
import org.springframework.session.web.context.AbstractHttpSessionApplicationInitializer;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;

@Order(2)
@EnableRedisHttpSession(maxInactiveIntervalInSeconds = 600)
public class SessionInit extends AbstractHttpSessionApplicationInitializer {
  @Override
  public void onStartup(ServletContext servletContext) throws ServletException
  {
    super.onStartup(servletContext);
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...