2013-03-22

Schedule in Spring 3.2.0 - Continued

從前文 Schedule in Spring 3.1.2 來到 Spring 3.2.0.RELEASE,也許我之前沒搞清楚,也許是方法改了,我相信前者可能性較大。

Spring 設定檔修改如下:
<?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:context="http://www.springframework.org/schema/context" xmlns:task="http://www.springframework.org/schema/task"
  xsi:schemaLocation="
    http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd
    http://www.springframework.org/schema/task
    http://www.springframework.org/schema/task/spring-task-3.0.xsd">

  <context:component-scan base-package="ja.neil.model,ja.neil.service,ja.neil.dao" />

  <context:property-placeholder location="classpath:/neil.properties" />

  <task:annotation-driven executor="webExecutor" />
  <task:executor id="webExecutor" pool-size="5" /><!-- @Async -->
  <task:scheduler id="myScheduler" pool-size="10" /><!-- @Scheduled -->
</beans>
@Scheduled 與 @Async 的用法同 Schedule in Spring 3.1.2
差別在於,不用在 XML 定義 scheduledTask,另外可以自訂 executor 與 scheduler,而且知道 executor 負責 @Async,scheduler 負責 @Scheduled。


但是呢?就算不設定 executor 或 scheduler,Spring 還是會提供預設值,也就是說,不管怎樣,只要定義了 @Async 或 @Scheduled,就一定會被執行,只要執行條件成立的話。

那如果有一種很不常見的需求,就是同時定義了 @Async 與 @Scheduled,但是在某種情況下,只要執行 @Async,另外一種情況下,只要執行 @Scheduled 呢?

我能想到的,就只有從 context-component-scan 下手。

就是將 @Async 與 @Scheduled 分別放在不同的 package,然後使用不同的 Spring XML 去 scan 想要的 package,再搭配兩種都會執行的 task:annotation-driven。

補充:Schedule in Spring 3.2.0 - 參數化
---
---
---

沒有留言:

張貼留言