detener la ejecución programada de Spring si se bloquea después de un tiempo fijo
He usado Spring Framework'sScheduled
programar mi trabajo para que se ejecute cada 5 minutos usando cron. Pero en algún momento mi trabajo espera infinitamente un recurso externo y no puedo poner tiempo fuera. No puedo usarfixedDelay
Como el proceso anterior en algún momento pasa en modo de espera infinita y tengo que actualizar los datos cada 5 minutos.
Así que estaba buscando cualquier opción en Spring FrameworkScheduled
para detener ese proceso / hilo después de unfixed-time
o se ejecuta con éxito o no.
He encontrado a continuación la configuración que inicializóThreadPoolExecutor
con 120 segundos parakeepAliveTime
que puse en@Configuration
clase. ¿Alguien puede decirme si esto funcionará como esperaba?
@Bean(destroyMethod="shutdown")
public Executor taskExecutor() {
int coreThreads = 8;
int maxThreads = 20;
final ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(
coreThreads, maxThreads, 120L,
TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>()
);
threadPoolExecutor.allowCoreThreadTimeOut(true);
return threadPoolExecutor;
}