Si no es necesario un retraso inicial, se puede hacer que se ejecute 'una sola vez' en el inicio de la siguiente manera:
<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>
(Por supuesto, si considera que su código se va a se ejecuta durante más tiempo que 3E8 years, es posible que necesite un enfoque diferente ...)
Si necesita un retraso inicial, puede configurarlo de la siguiente manera (estoy probando con Spring 3.1.1) - esto no requiere cualquier dependencia adicional y no tienes que escribir tu propio disparador, pero tienes que configurar el PeriodicTrigger
proporcionada por el resorte:
<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>
Primavera 3.2 parece apoyar la "inicial de retardo" atribuir directamente, pero no han probado este; Supongo que esto funciona:
<task:scheduled-tasks>
<task:scheduled ref="myThing" method="doStuff"
fixed-rate="#{ T(java.lang.Long).MAX_VALUE }"
initial-delay="5000"/>
</task:scheduled-tasks>
¿Cuál es la sintaxis? –