2011-12-17 6 views
5

Tengo una aplicación Java EE que descarga precios de acciones de Internet cada quince minutos. Desde una perspectiva de precisión de tiempo, es mejor que la aplicación internalice esta operación periódica, es decir, use Thread.sleep() en combinación con un contador o configure un temporizador. ¿O sería mejor exponer la tarea a través de una URL y hacer que una cron funcione? periódicamente (a la frecuencia requerida del curso).Utilice el trabajo cron Thread.sleep(), Timer o plataforma para una operación periódica en la aplicación Java EE

¿Cuáles son los pros y los contras de ambos enfoques?

Me ha asustado un error del temporizador que vi denunciado en relación con la implementación de OpenJDK. El error indicaba que los cambios en el tiempo del sistema afectaban el funcionamiento de las operaciones y los métodos relacionados con el tiempo, como la periodicidad de reposo y el temporizador.

+1

Debe considerar el uso de cuarzo. – fge

+0

¿Por qué alguien cambiaría la hora del sistema? –

+0

Relacionados: http://stackoverflow.com/questions/7499534/applicationscope-bean-that-uses-a-timertask-sheduler-good-or-bad/7499769#7499769 y http://stackoverflow.com/questions/5357033/background-timer-task-in-jsp-servlet-web-application/5357856 # 5357856 – BalusC

Respuesta

1

Considere la posibilidad de utilizar un trabajo de planificación que se creó para la tarea. Intenta dividir la tarea de cualquier consideración de tiempo.

  • Como se sugirió, Quartz es una buena opción.
  • Cron no está mal, pero requeriría más configuración para integrarse con su tarea .
  • Si en Java EE puede usar un temporizador EJB.
  • Puede liar con ScheduledExecutorService (no recomendado)
1

Thread.sleep no es una forma recomendada de ejecutar el código periódicamente. Es inexacto y generalmente es un signo de mal diseño. Sugiero que use la clase Timer para programar fácilmente la ejecución del código periódicamente.

2

Timer no está en desuso, pero ahora existe una mejor alternativa: SheduledExecutorService. Una de las cosas que lo hace mejor es que usa tiempo relativo en lugar de tiempo absoluto para la programación.

El uso de un script cron externo o un temporizador interno es solo una cuestión o preferencia, en mi humilde opinión. Un temporizador interno es más fácil de configurar, pero si ya tiene otros crons en su lugar, es posible que desee utilizar uno adicional y tener esta responsabilidad en un solo lugar.

Cuestiones relacionadas