Spring Security 3.0系列開發(fā)出來的時(shí)間并不長,不過目前已經(jīng)有許多項(xiàng)目整合進(jìn)入了Spring Security 3.0,原因是確實(shí)比2.0系列有了不上改進(jìn),不過目前關(guān)于Spring Security 3.0的中文開發(fā)文檔和書籍太少了,下面老師為大家介紹Spring Security 3.0的任務(wù)調(diào)度。
Spring3.0以后,自己已經(jīng)完全支持更加精確的時(shí)間,而不需要Quartz(Quartz是一個(gè)開放源碼項(xiàng)目,專注于任務(wù)調(diào)度器,提供了極為廣泛的特性如持久化任務(wù),集群和分布式任務(wù)等。Spring對(duì)Quartz的集成與其對(duì)JDK Timer的集成在任務(wù)、觸發(fā)器和調(diào)度計(jì)劃的聲明式配置方面等都非常相似。
)的支持:當(dāng)然后面我們也會(huì)用Quartz實(shí)現(xiàn)任務(wù)的調(diào)度。
)的支持:當(dāng)然后面我們也會(huì)用Quartz實(shí)現(xiàn)任務(wù)的調(diào)度。
Spring3.0同樣也使用cron表達(dá)式。與Quartz不同的是,Spring3.0不支持年,而Quartz支持年。但這點(diǎn)好象并不是非常重要。
cron表達(dá)式:-是用空格分開的時(shí)間字段,不使用年。
*(秒0-59) *(分鐘0-59) *(小時(shí)0-23) *(日期1-31) *(月份1-12或是JAN-DEC) *(星期1-7或是SUN-SAT)
示例:
*/5 * * * * 6-7 :: 每個(gè)周6到周日,每隔5秒鐘執(zhí)行一次。
*/1 * * 7-9 1-2 1-7 :: 1月到2月中的7號(hào)到9號(hào),且必須要滿足周一到周日,每隔1秒鐘執(zhí)行一次。
*/1 * * 7-9 1,5 1-7 :: 注意里面的,(逗號(hào)),只有1月和5月的7到9號(hào),且必須要滿足周一到周日,每一秒鐘執(zhí)行一次。
*/1 17-59 * 7-9 1,5 1-7 :: 只解釋17-59,是指從第17分鐘到第59分鐘,在指定的時(shí)間內(nèi),每一秒種執(zhí)行一次
* 17-59 * 7-9 1,5 1-7 :: 此代碼的功能與上面完全相同。如果不寫秒即為每一秒執(zhí)行一次。
59 19-23 * 7-9 1,5 1-7 :: 19分-23分的每59秒鐘時(shí)只執(zhí)行一次。
59 19,26 * 7-9 1,5 1-7 :: 注意里面的,(逗號(hào)),是指只有19分或是26分的56秒鐘時(shí)執(zhí)行一次。
* * 16-23 7-9 1,5 1-7 :: 定義每天的16點(diǎn)到23點(diǎn)每一秒鐘執(zhí)行一次。
59 59 23 * * 1-5 :: 定義每周1到周5,晚上23:59:59秒只執(zhí)行一次。這個(gè)相當(dāng)用有。可以工作時(shí)間每天給用戶發(fā)郵件。
在Spring3.0中引用了新的命名空間-task:
task:scheduler 用于定義一個(gè)ThreadPoolTaskScheduler,并可以指定線程池的大小,即pool-size.所有任務(wù)隊(duì)列都將會(huì)在指定大小的線程池中運(yùn)行:
定義如下:
<!-- 對(duì)于同一個(gè)Pojo可以聲明多次,并設(shè)置標(biāo)記屬性 -->
<bean id="one" class="cn.itcast.schedule.One">
<property name="task" value="A"></property>
</bean>
<bean id="two" class="cn.itcast.schedule.One">
<property name="task" value="B"></property>
</bean>
<bean id="three" class="cn.itcast.schedule.One">
<property name="task" value="C"></property>
</bean>
<!-- 聲明一個(gè)具有兩個(gè)線程的池,每一個(gè)對(duì)象將獲取同樣的運(yùn)行機(jī)會(huì) -->
<task:scheduler id="sch" pool-size="2"/>
<!-- 引用線程池 -->
<task:scheduled-tasks scheduler="sch">
<!-- 引用Spring Bean并設(shè)置調(diào)用的方法的時(shí)間間隔 -->
<task:scheduled ref="one" method="doSomeThing" fixed-delay="#{1000*3}"/>
<task:scheduled ref="two" method="doSomeThing" fixed-delay="#{1000*3}"/>
<task:scheduled ref="three" method="doSomeThing" fixed-delay="#{1000*3}"/>
</task:scheduled-tasks>
<!-- 配置一個(gè)定時(shí)執(zhí)行的任務(wù) -->
<bean id="work" class="cn.itcast.schedule.Two"/>
<task:scheduler id="sendMail"/>
<task:scheduled-tasks scheduler="sendMail">
<!-- 定義在1月8號(hào)19:37:1秒執(zhí)行一次,無論是周幾 -->
<task:scheduled ref="work" method="work" cron="1 37 19 8 1 *"/>
</task:scheduled-tasks>
定義好之后,正常啟動(dòng)容器即可,只有條件符合,即會(huì)按要求執(zhí)行任務(wù)。