Spring Task 進行java定時任務
最近做了一個關於定時任務的程式,這裡做個備份,以及我遇到的問題記錄一下!
專案maven架構如下:
方式一:
1,配置檔案application-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<import resource="config/spring-config-*.xml" />
<bean id="ISystemLogReportEmailService" class="com.centaline.ibs.service.stats.report.impl.SystemLogReportEmailServiceImpl"></bean>
<task:scheduled-tasks >
<!-- 配置定時規則 配置定時任務 每天早上5:00 觸發 -->
<task:scheduled ref="ISystemLogReportEmailService" method="TimeJob" cron="0 0 5 * * ?"/>
<task:scheduled ref="ISystemLogReportEmailService" method="TimeSendEmail" cron="0 30 9 * * ?"/>
</task:scheduled-tasks>
</beans>
注意:
一定要介面有這個定時任務方法,實現類中也要有,缺一不可,否則在專案啟動時就會報錯,說找不到task,,,,問題
2,新建一個符合你需求的定時任務
2.1介面中的定時方法:
2.2 實現類中的定時方法--具體邏輯按照你的需求
3,啟動你的專案,在專案啟動完成後
按照你上面的設定時間,就會呼叫你的定時任務 --親測有效
線上 cron表示式生成器:http://cron.qqe2.com/
例如:"0 15 10 * * ?" 每天上午10:15觸發
方式二:
1,配置檔案spring-config-annotation.xml
<beans default-lazy-init="true"
xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:task="http://www.springframework.org/schema/task"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task.xsd">
<mvc:annotation-driven conversion-service="conversionService" />
<!-- 掃描某某包下面使用@Component註解的類 將其例項化,放入spring容器中 -->
<context:component-scan base-package="com.centaline.*"/>
<!-- 啟用定時任務的註解驅動 -->
<task:annotation-driven/>
<!-- 注:spring定時任務預設單執行緒,推薦配置執行緒池,若不配置多工下會有問題。 -->
<task:scheduler id="poolTaskScheduler" pool-size="10"/>
</beans>
2,新建一個定時package com.centaline.spring_task; import org.springframework.scheduling.annotation.Scheduled;import org.springframework.stereotype.Component;/*** 使用 SpringTask 製作定時任務*/
@Component public class SpringTask { @Scheduled(cron = "0/1 * * * * ? ") public void TimeJob(){ System.out.println("定時任務....."); }
}
3,啟動專案即可
備註點:不管是哪種方式,定時任務的方法都是不能帶引數,否則會報錯
如果有哪位大神,可以帶引數,請告知,互相學習~~~