spring中定時器的使用
在很多實際的web應用中,都有需要定時實現的服務,如每天12點推送個新聞,每隔一個小時提醒使用者休息一下眼睛,隔一段時間檢測使用者是否離線等等。
spring框架提供了對定時器的支援,通過配置檔案就可以很好的實現定時器,只需要應用啟動,就自動啟動定時器。下面介紹一下具體做法。
第一種,使用XML配置的方法
前期工作,配置spring的開發環境(這裡用到了spring的web應用包,需要匯入)
首先建立定時器的任務類,定時器要做什麼工作,就在這裡寫什麼方法。
package org.time;
import java.util.TimerTask;
public class MainTask extends TimerTask{
@Override
public void run() {
System.out.println("檢測使用者是否掉線");
}
}
接著在配置檔案中對定時器進行配置。
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="mainTask" class="org.time.MainTask"></bean>
<!-- 註冊定時器資訊 -->
<bean id="springTask" class="org.springframework.scheduling.timer.ScheduledTimerTask">
<!-- 延遲1秒執行首次任務 -->
<property name="delay" value="1000"></property>
<!-- 每隔2秒執行一次任務 -->
<property name="period" value="2000"></property>
<!-- 具體執行的任務 -->
<property name="timerTask" ref="mainTask"></property>
</bean>
<!-- 配置任務排程器工廠 -->
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref bean="springTask"/>
</list>
</property>
</bean>
</beans>
最後還需要在web.xml中對配置資訊進行註冊:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
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_2_5.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
</web-app>
這樣就完成了定時器的配置,這時啟動tomcat,觀察控制檯輸出的結果:
第二種,使用註解的形式
(spring中一使用註解,感覺就是比其他方法方便了很多,程式碼減少了很多)
這裡需要用到AOP,需要引入AOP類庫
先看定時器的任務類:
package org.time;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;
@Component
public class MainTask01{
@Scheduled(cron = "0/3 * * * * ?")
public void run() {
System.out.println("推送訊息來了");
}
}
@Scheduled(cron = "0/3 * * * * ?") 表示三秒推送一次corn可以配置各種時段任務:
欄位 |
值 |
特殊表示字元 |
年 |
一般為空,1970-2099 |
, - * / |
月 |
1-12 或者 JAN-DEC |
, - * / |
星期 |
1-7 或者 SUN-SAT |
, - * ? / L C # |
日 |
1-31 |
, - * ? / L W C |
時 |
0-23 |
, - * / |
分 |
0-59 |
, - * / |
秒 |
0-59 |
, - * / |
如: 配置每個工作日的10:20觸發 :"0 20 10 ? * MON-FRI"
配置檔案:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<context:annotation-config />
<!-- spring掃描註解的配置 -->
<context:component-scan base-package="org.time" />
<task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
<task:scheduler id="qbScheduler" pool-size="10"/>
</beans>
配置檔案的頭部資訊中比上一個引入了
xmlns:task="http://www.springframework.org/schema/task"
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd
<task:annotation-driven scheduler="qbScheduler" mode="proxy"/>
<task:scheduler id="qbScheduler" pool-size="10"/>
這兩句配置資訊是必須要寫的,這是spring識別@Scheduled註解的關鍵
這這樣簡單的幾句配置之後,開啟服務,執行結果:
spring中使用註解的方法完成定時器,不需要整合其他父類定時器,使用簡單方便!程式碼量少,功能也很強大!
相關文章
- VC中定時器的使用定時器
- Qt中的定時器的使用QT定時器
- Spring 定時器的使用—Xml、Annotation、自定義Spring定時器XML
- Spring 定時器的使用---Xml、Annotation、自定義Spring定時器XML
- java定時器的使用Java定時器
- Spring Quartz定時器&n…Springquartz定時器
- spring boot中的定時任務Spring Boot
- Golang當中的定時器Golang定時器
- java 中定時器Java定時器
- C++定時器的使用C++定時器
- [iOS]各種定時器–最全的定時器使用iOS定時器
- iOS中的3種定時器iOS定時器
- C#中的定時器(二)C#定時器
- Android中的定時器AlarmManagerAndroid定時器
- Spring定時器的兩種實現方式Spring定時器
- Spring定時器的配置(註解+xml)方式Spring定時器XML
- Spring Task定時任務的配置和使用Spring
- 5、Angular中的$timeOut定時器Angular定時器
- 在Spring中使用JDK定時器實現排程任務SpringJDK定時器
- CADisplayLink 及定時器的使用定時器
- 定時器以及定時器的幾個案例定時器
- Spring Boot中攔截器的使用Spring Boot
- Spring中Quartz排程器的使用Springquartz
- 微控制器學習(六)定時器的使用定時器
- Spring定時任務高階使用篇Spring
- Spring之定時任務基本使用篇Spring
- 使用Selenium時的瀏覽器設定瀏覽器
- 51模組_定時器與中斷定時器
- Go 的定時器Go定時器
- 使用Spring Task輕鬆完成定時任務Spring
- Spring Boot 中實現定時任務的兩種方式Spring Boot
- 直播軟體開發,ScheduledExecutorService定時器的使用定時器
- 多執行緒-定時器的概述和使用執行緒定時器
- 定時器定時器
- Spring 定時任務Spring
- Java可自定義中斷定時器的實現Java定時器
- 使用Spring整合Quartz輕鬆完成定時任務Springquartz
- 使用spring @Scheduled註解執行定時任務、Spring