美文网首页
关于Spring boot部署到独立Tomcat时,Servle

关于Spring boot部署到独立Tomcat时,Servle

作者: 千叶鸟 | 来源:发表于2017-08-07 14:06 被阅读397次

    前文

    在将 spring boot 应用部署到独立的tomcat服务器时,会因为@ServletComponentScan注解不起作用,从而导致以注解形式注入的监听器、过滤器以及 Servlet 注入失败(因为独立Tomcat采用的是容器内建的discovery机制),最终导致项目启动失败,为了避免这一情况,最好以 @Bean 的形式注册相关servlet

    示例

    注册 Session 监听器

    首先实现 HttpSessionListener 来定义一个 session 监听器,注意,这里将不再使用 @WebListener 注解

    //  @WebListener  // 因为需要在独立的tomcat中部署,所以改为采用ServletListenerRegistrationBean来注册监听器
    public class SessionHandler implements HttpSessionListener {
        @Resource
        private ILoginLogService loginLogService;
    
        @Override
        public void sessionCreated(HttpSessionEvent httpSessionEvent) {
            System.out.println("session created");
        }
    
        @Override
        public void sessionDestroyed(HttpSessionEvent httpSessionEvent) {
            System.out.println("session Destroyed");
            UserDetailsBean user = (UserDetailsBean) httpSessionEvent.getSession().getAttribute("user-detail");
            if (user != null && loginLogService != null) {
                LoginLog lastLogByUserId = loginLogService.getLastLogByUserId(user.getId());
                lastLogByUserId.setLogoutTime(new Date());
                loginLogService.update(lastLogByUserId);
            }
        }
    }
    

    然后在一个配置类中对定义的监听器类进行注册

    @Bean
    public ServletListenerRegistrationBean sessionHandler() {
        return new ServletListenerRegistrationBean<>(new SessionHandler());
    }
    

    通过以上方式,可以有效解决 @ServletComponentScan 在独立容器中失效的问题

    相关文章

      网友评论

          本文标题:关于Spring boot部署到独立Tomcat时,Servle

          本文链接:https://www.haomeiwen.com/subject/wjxalxtx.html