以前是這麼用的。
@Scheduled(fixedRate = 10000) @Scheduled(fixedDelay = 5000) @Scheduled(cron = "*/3 50-55 9,10 26 * ?")這有什麼問題呢?問題發生在「參數化」。
當想要(一般也都這樣)將 fixedRate、fixedDelay 或 cron 的值拉到 Properties 檔設定時,就會發生問題了。
先在 Properties 檔設定。
fixed.rate=1000 fixed.delay=1000 cron=*/3 50-55 9,10 26 * ?然後修改 Annotation 去讀 Properties。
@Scheduled(fixedRate = ${fixed.rate}) @Scheduled(fixedDelay = ${fixed.delay}) @Scheduled(cron = "${cron}")看似沒問題,但是編譯不過!
因為 fixedRate = ${fixed.rate} 這語法是錯的,必須像 cron 那樣加上雙引號,但是加上雙引號後,fixedRate 有意見了,因為 fixedRate 只接受 long 型別,不能用 String 型別。
Google 了半天,無解,至少在 Annotaion 這塊無解,只能改用 XML 的設定方式。
<bean id="usreService" class="ja.neil.service.UserServiceImpl"> <property name="userDao" ref="userDao"/> </bean> <task:scheduled-tasks scheduler="neilScheduler"> <task:scheduled ref="usreService" method="syncUser" fixed-rate="${syncUser.interval}" /> <task:scheduled ref="usreService" method="backupUser" fixed-rate="${backupUser.interval}" /> </task:scheduled-tasks> <task:scheduler id="neilScheduler" pool-size="10" />再進階使用,Spring Express Language 可以做運算。
<task:scheduled-tasks scheduler="neilScheduler"> <task:scheduled ref="usreService" method="syncUser" fixed-rate="#{${syncUser.interval} * 60}" /> <task:scheduled ref="usreService" method="backupUser" fixed-rate="#{${backupUser.interval} * 60}" /> </task:scheduled-tasks>---
---
---
沒有留言:
張貼留言