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 - 參數化
---
---
---
沒有留言:
張貼留言