spring註解定時器啟動兩次,解決方案
阿新 • • 發佈:2018-12-11
<?xml version="1.0" encoding="utf-8" ?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!-- 首頁 --> <welcome-file-list> <welcome-file>/jsp/WEB/index.jsp</welcome-file> </welcome-file-list> <!--Session失效時間--> <session-config> <session-timeout>-1</session-timeout> </session-config> <!--在應用啟動時,同步通話記錄--> <listener> <listener-class>com.casic.zjo2o.listener.CallRecordSyncListener</listener-class> </listener> <!-- #######################配置Spring配置檔案路徑####################### --> <!-- <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring.xml classpath:net/bull/javamelody/monitoring-spring.xml </param-value> </context-param> --> <!-- #######################配置Spring上下文監聽器####################### --> <!-- <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> --> <!-- <filter> <filter-name>monitoring</filter-name> <filter-class>net.bull.javamelody.MonitoringFilter</filter-class> </filter> <filter-mapping> <filter-name>monitoring</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <listener> <listener-class>net.bull.javamelody.SessionListener</listener-class> </listener>--> <!-- #######################對請求的字元編碼進行統一處理####################### --> <filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- #######################Session超時過濾處理#######################--> <filter> <filter-name>sessionFilter</filter-name> <filter-class>com.casic.zjo2o.common.filter.SessionFilter</filter-class> </filter> <filter-mapping> <filter-name>sessionFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- #######################Spring MVC 核心控制器 DispatcherServlet 配置####################### --> <servlet> <servlet-name>SpringMVC Dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>SpringMVC Dispatcher</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.js</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.css</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.jpg</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.png</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>default</servlet-name> <url-pattern>*.json</url-pattern> </servlet-mapping> <!-- servlet 'disuz_uc_api' 用於接收Discuz UCenter的同步訊息, 此項配置必須有。(可適當調整 load-on-startup引數) --> <servlet> <servlet-name>disuz_uc_api</servlet-name> <servlet-class>com.casic.zjo2o.bbs.api.UC</servlet-class> <load-on-startup>2</load-on-startup> </servlet> <servlet-mapping> <servlet-name>disuz_uc_api</servlet-name> <url-pattern>/api/uc.php</url-pattern> </servlet-mapping> <!-- #######################獲得專案的絕對路徑####################### --> <context-param> <param-name>webAppRootKey</param-name> <param-value>ft.webapp</param-value> </context-param> <listener> <listener-class>org.springframework.web.util.WebAppRootListener</listener-class> </listener> </web-app>
上面是解決問題之後的web.xml檔案
註釋掉如下程式碼:
<!-- #######################配置Spring配置檔案路徑####################### --> <!-- <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:spring.xml classpath:net/bull/javamelody/monitoring-spring.xml </param-value> </context-param> --> <!-- #######################配置Spring上下文監聽器####################### --> <!-- <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> -->
然後確保org.springframework.web.servlet.DispatcherServlet在啟動的時候把spring的入口xml檔案載入到了容器中去
程式碼如下:
<!-- #######################Spring MVC 核心控制器 DispatcherServlet 配置####################### --> <servlet> <servlet-name>SpringMVC Dispatcher</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <init-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:spring.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> <async-supported>true</async-supported> </servlet>
問題原因分析:在服務啟動的時候,spring 容器被啟動了兩次,所以導致定時任務的重複執行。