Nếu bạn không cần một sự chậm trễ ban đầu, bạn có thể làm cho nó chạy 'chỉ một lần' khi khởi động như sau:
<task:scheduled-tasks>
<!-- Long.MAX_VALUE ms = 3E8 years; will run on startup
and not run again for 3E8 years -->
<task:scheduled ref="myThing" method="doStuff"
fixed-rate="#{ T(java.lang.Long).MAX_VALUE }" />
</task:scheduled-tasks>
(Tất nhiên, nếu bạn nghĩ rằng mã của bạn sẽ chạy lâu hơn 3E8 years, bạn có thể cần một cách tiếp cận khác ...)
Nếu bạn cần chậm trễ ban đầu, bạn có thể định cấu hình như sau (Tôi đang thử nghiệm với Spring 3.1.1) - điều này không yêu cầu bất kỳ phụ thuộc bổ sung nào và bạn không phải viết trình kích hoạt của riêng mình, nhưng bạn phải định cấu hình PeriodicTrigger
do Spring cung cấp:
<bean id="onstart" class="org.springframework.scheduling.support.PeriodicTrigger" >
<!-- Long.MAX_VALUE ms = 3E8 years; will run 5s after startup and
not run again for 3E8 years -->
<constructor-arg name="period" value="#{ T(java.lang.Long).MAX_VALUE }" />
<property name="initialDelay" value="5000" />
</bean>
<task:scheduled-tasks>
<task:scheduled ref="myThing" method="doStuff" trigger="onstart" />
</task:scheduled-tasks>
Mùa xuân 3.2 dường như hỗ trợ trực tiếp thuộc tính "ban đầu", nhưng tôi chưa thử nghiệm điều này; Tôi đoán công trình này hoạt động:
<task:scheduled-tasks>
<task:scheduled ref="myThing" method="doStuff"
fixed-rate="#{ T(java.lang.Long).MAX_VALUE }"
initial-delay="5000"/>
</task:scheduled-tasks>
Cú pháp này là gì? –