springmvc框架定時器功能實現和service注入問題解決
1、在SpringMVC配置檔案中新增
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.2.xsd
配置任務掃描
<task:annotation-driven />
配置掃描任務位置
<!-- 掃描任務 --> <context:component-scan base-package="com.vrveis.roundTrip.task" />
2、如果定時器方法單獨寫在一個工具類裡,沒有配置掃描該資料夾,注入service就會失敗,可以通過SpringContextUtil類呼叫
具體程式碼如下:
呼叫方法:package com.test.controller.base; import org.apache.log4j.Logger; import org.springframework.beans.BeansException; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Component; /** * 在Spring 註解中,普通類獲取@Service標記的方法或者bean物件 */ @Component public class SpringContextUtil implements ApplicationContextAware { private static Logger logger = Logger.getLogger(SpringContextUtil.class); private static ApplicationContext applicationContext = null; public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { logger.info("------SpringContextUtil setApplicationContext-------"); SpringContextUtil.applicationContext = applicationContext; } public static ApplicationContext getApplicationContext() { return applicationContext; } /** * 注意 bean name預設 = 類名(首字母小寫) * 例如: A8sClusterDao = getBean("a8sClusterDao") * @param name * @return * @throws BeansException */ public static Object getBean(String name) throws BeansException { return applicationContext.getBean(name); } /** * 根據類名獲取到bean * @param <T> * @param clazz * @return * @throws BeansException */ @SuppressWarnings("unchecked") public static <T> T getBeanByName(Class<T> clazz) throws BeansException { try { char[] cs=clazz.getSimpleName().toCharArray(); cs[0] += 32;//首字母大寫到小寫 return (T) applicationContext.getBean(String.valueOf(cs)); } catch (Exception e) { e.printStackTrace(); return null; } } public static boolean containsBean(String name) { return applicationContext.containsBean(name); } public static boolean isSingleton(String name) throws NoSuchBeanDefinitionException { return applicationContext.isSingleton(name); } }
//獲取 Bean 注意bean的首字母小寫
RcpqService rcpqService=(RcpqService) SpringContextUtil.getBean("rcpqService");
3、利用監聽器,實現定時器功能:
在web.xml中設定監聽器:
<listener>
<listener-class>com.test.listener.MyTimerTaskListener</listener-class>
</listener>
監聽器程式碼如下:
定時器業務程式碼如下:package com.test.listener; import java.util.Calendar; import java.util.Timer; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; import com.test.util.MyTimerTask; /** * @author snwei */ public class MyTimerTaskListener implements ServletContextListener { private Timer timer = null; @Override public void contextDestroyed(ServletContextEvent arg0) { timer.cancel(); } @Override public void contextInitialized(ServletContextEvent arg0) { System.out.println("-----開始啟動定時器------"); Calendar firstStart = Calendar.getInstance(); firstStart.set(Calendar.HOUR_OF_DAY, 0); firstStart.set(Calendar.MINUTE, 10); firstStart.set(Calendar.SECOND, 0); timer = new Timer(true); //第一次是凌晨0:10:00執行,間隔24小時執行一次 timer.schedule(new MyTimerTask(), firstStart.getTime(), 1000*60*60*24); //timer.scheduleAtFixedRate(task, delay, intevalPeriod);//嚴格按照排程時間來的,時間不會順延 //timer.schedule(task, new Date(), intevalPeriod);//如果某一次排程時間比較長,那麼後面的時間會順延,保證排程間隔 //timer.scheduleAtFixedRate(new MyTimerTask(), 0, 1000*60*10); //測試 } }
package com.test.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.TimerTask;
import com.test.controller.base.SpringContextUtil;
import com.test.service.manager.rcpq.RcpqService;
/**
* 定時器
*/
public class MyTimerTask extends TimerTask{
@Override
public void run() {
//獲取 Bean
RcpqService rcpqService=(RcpqService) SpringContextUtil.getBean("rcpqService");
//呼叫service方法,業務程式碼實現
...
}
}
相關推薦
springmvc框架定時器功能實現和service注入問題解決
1、在SpringMVC配置檔案中新增 xmlns:task="http://www.springframework.org/schema/task" http://www.springframework.org/schema/task http://www.spri
STM32通用定時器的基本定時器功能實現燈閃爍
/*MAIN.C*/ /* Includes ------------------------------------------------------------------*/#inclu
springMVC框架網頁下載功能實現
List<Map<String,Object>> list=selectData();//到資料庫中查詢需要匯出的資訊HSSFWorkbook wb = new HSSFWorkbook();HSSFSheet sheet = wb.createSheet("匯出資訊"
SpringMVC註解定時器的配置和時間設定
首先,在springMVC的註解配置檔案即啟動servelet會讀取的xml配置檔案中新增定時器的規範 xmlns:task="http://www.springframework.org/schema/task" 和 http://www.springfram
不用寫Windows服務實現定時器功能(FluentScheduler )
ace 簡單 要去 job macbook sharp 管理 dia 做到 MacBook Pro 只有四個 USB Type-C 接口是否錯了? 一項新技術的誕生總會對已存在的事物造成沖擊或影響,如果大家都害怕沖擊與影響,那這個世界永遠像現在不變就行了,大家都好好的,待
PHP 使用do while 實現定時器功能
<?php require "./config.php"; require "./function/function.php"; header("content-type:text/html;charset=utf-8"); ignore_user_abort();//關閉瀏覽器仍然
在dll裡實現定時器功能
一,首先引入“mmsystem”單元。二,啟動定時器: var MMTimerID: Integer; // 定時器ID MMTimerID := timeSetEvent(1000, 0, @TimerProc, 0, TIME_PERI
Linux C/C++定時器的實現原理和使用方法
定時器的實現原理 定時器的實現依賴的是CPU時鐘中斷,時鐘中斷的精度就決定定時器精度的極限。一個時鐘中斷源如何實現多個定時器呢?對於核心,簡單來說就是用特定的資料結構管理眾多的定時器,在時鐘中斷處理中判斷哪些定時器超時,然後執行超時處理動作。而使用者空間程式不
SpringMVC中定時器繼承Task後無法對service注入問題
edisTask是通過定時器來每分鐘像資料庫裡推送的,於是就有了 public class RedisTask extends Task { public void execute(TaskExecutionContext executor) throws
實現定時器功能的幾種方式
nsrunLoop GCD RAC NsrunLoop NSRunLoop是IOS訊息機制的處理模式 一條執行緒對應一個RunLoop,主執行緒的RunLoop預設已經建立好了, 而子執行緒的需要我們自己手動
定時器查詢法和定時器中斷法實現LED閃爍
1、定時器查詢法實現LED閃爍 ;2013/4/23 ;延時1s閃爍 org 0000h ajmp start org 30h
定時器的實現、java定時器Timer和Quartz介紹與Spring中定時器的配置
欄位 允許值 允許的特殊字元 秒 0-59 , - * / 分 0-59 , - * / 小時 0-23 , - * / 日期 1-31 , - * ? / L W C 月份 1-12 或者 JAN-DEC , - * / 星期 1-7 或者 SUN-SAT , - *
C# System.Timers.Timer定時器的使用和定時自動清理內存應用
for process work proc program 指定時間 handle 清理 interval 項目比較大有時候會比較卡,雖然有GC自動清理機制,但是還是有不盡人意的地方。所以嘗試在項目啟動文件中,手動寫了一個定時器,定時清理內存,加快項目運行速度。 pub
js--定時器的學習和對動畫的封裝(定時器)
定時器 回調 .get floor val logs 多個 get math 1.定時器:在js裏面,定時器主要有兩種,setInterval(function, time) 和 setTimeout(function,time), setInterval:每個time秒執
N76E003的定時器/計數器 0和1
時鐘周期 14. 波特率 翻轉 離開 kcon In IV 進行 定時器/計數器 0和1N76E003系列定時器/計數器 0和1是2個16位定時器/計數器。每個都是由兩個8位的寄存器組成的16位計數寄存器。 對於定時器/計數器0,高8位寄存器是TH0、 低8位寄存器是TL0
Spring 定時器schedule實現
執行 掃描 clearing process obj after ice wait code 註解方式: 核心類摘要: 1.ScheduledAnnotationBeanPostProcessor 2.ScheduledTaskRegistrar 3.TaskSchedul
微信小程序學習Course 7 定時器功能
換算 ava 而且 tint 毫秒 src ole 時間 技術 微信小程序學習Course 7 定時器功能 微信小程序中有一個定時器API函數,其提供了四個API接口 7.1、number setTimeout(function callback, number
linux定時器的實現方法
this 就是 沒有 讀取數據 entry arm sigalrm read time Linux提供定時器機制,可以指定在未來的某個時刻發生某個事件,定時器的結構如下: struct timer_list { struct list_head list;
MySQL觸發器與定時器的介紹和錯誤處理
MySQL觸發器與定時器的介紹和錯誤處理方法 最近在做一個東南亞的海外專案,整個專案的技術架構是由我負責,由於專案比較龐大,涉及三種語言,資料關係比較複雜,用的觸發器、定時器比較多。借這個新型大專案,也重溫了了很久沒有接觸的觸發器(TRIGGER)、定時器(EVENT),本文也是回憶結合
springMVC檢視解析器的配置和使用
在spring-servlet.xml中配置檢視解析器 <!-- 配置檢視解析器 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"