關(guān)于Spring boot部署到獨立Tomcat時,Servlet未能注入的問題

前文

在將 spring boot 應(yīng)用部署到獨立的tomcat服務(wù)器時,會因為@ServletComponentScan注解不起作用,從而導(dǎo)致以注解形式注入的監(jiān)聽器、過濾器以及 Servlet 注入失?。ㄒ驗楠毩omcat采用的是容器內(nèi)建的discovery機制),最終導(dǎo)致項目啟動失敗,為了避免這一情況,最好以 @Bean 的形式注冊相關(guān)servlet

示例

注冊 Session 監(jiān)聽器

首先實現(xiàn) HttpSessionListener 來定義一個 session 監(jiān)聽器,注意,這里將不再使用 @WebListener 注解

//  @WebListener  // 因為需要在獨立的tomcat中部署,所以改為采用ServletListenerRegistrationBean來注冊監(jiān)聽器
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);
        }
    }
}

然后在一個配置類中對定義的監(jiān)聽器類進行注冊

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

通過以上方式,可以有效解決 @ServletComponentScan 在獨立容器中失效的問題

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • IOC 控制反轉(zhuǎn)容器控制程序?qū)ο笾g的關(guān)系,而不是傳統(tǒng)實現(xiàn)中,有程序代碼之間控制,又名依賴注入。All 類的創(chuàng)建,...
    irckwk1閱讀 1,099評論 0 0
  • 這部分主要是與Java Web和Web Service相關(guān)的面試題。 96、闡述Servlet和CGI的區(qū)別? 答...
    雜貨鋪老板閱讀 1,504評論 0 10
  • 本文包括:1、Listener簡介2、Servlet監(jiān)聽器3、監(jiān)聽三個域?qū)ο髣?chuàng)建和銷毀的事件監(jiān)聽器4、監(jiān)聽三個域?qū)?..
    廖少少閱讀 6,674評論 6 28
  • Part IV. Spring Boot Features(Spring Boot 的特性)SpringAppli...
    Herman7z閱讀 1,566評論 0 2
  • 文 | 晨妤兒 流年里有你的故事 被風(fēng)雨包裹著 被上天征收回去了 你行走的路上 變成是上天的安排 人間有你的故事書...
    晨妤兒閱讀 888評論 1 5

友情鏈接更多精彩內(nèi)容