¿Por qué el temporizador original de Spring sigue ejecutándose después de que SchedulerX toma el control?
Si se especifica un programador personalizado en la aplicación, SchedulerX lo sobrescribe. Este conflicto suele ocurrir cuando una clase implementa org.springframework.scheduling.annotation.SchedulingConfigurer y llama al método setScheduler de ScheduledTaskRegistrar, lo cual reemplaza al programador predeterminado.
Para resolver este problema:
Busque en su proyecto cualquier clase que implemente
SchedulingConfigurer.Compruebe si se invoca el método
setSchedulerdeScheduledTaskRegistrar.Si se cumple alguna de estas condiciones, comente el código del programador personalizado.
¿Cómo obtengo el contexto del trabajo en un trabajo de Spring?
Llame a ContainerFactory.getContainerPool().getContext() para obtener el JobContext actual:
// Get the SchedulerX job context inside a @Scheduled method
JobContext jobContext = ContainerFactory.getContainerPool().getContext();
¿Puede un trabajo de Spring devolver un resultado de procesamiento?
Esta función requiere una versión del agente de SchedulerX posterior a la 1.10.11. Las versiones 1.10.11 y anteriores no admiten valores de retorno en trabajos de Spring.
Los resultados de procesamiento se devuelven según los métodos de programación especificados. Los trabajos de Spring admiten dos tipos de retorno:
|
Tipo de retorno |
Caso de uso |
|
|
Devolver un estado de éxito o fallo junto con un mensaje de resultado |
|
|
Devolver únicamente un mensaje de resultado |
Los siguientes ejemplos utilizan la anotación @Scheduled con una expresión cron.
**Devolver un ProcessResult**
Utilice ProcessResult para indicar éxito o fallo junto con un mensaje de resultado:
@Scheduled(cron = "0/5 * * * * ?")
public ProcessResult helloStandalone1() {
try {
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. start");
TimeUnit.SECONDS.sleep(2L);
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. end");
} catch (Exception e) {
e.printStackTrace();
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. exception end..");
}
// First argument: true for success, false for failure
// Second argument: result message
return new ProcessResult(true, "Processing result");
}
**Devolver un String**
Devuelva un String directamente cuando no necesite un indicador explícito de éxito o fallo:
@Scheduled(cron = "0/5 * * * * ?")
public String helloStandalone2() {
try {
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. start");
TimeUnit.SECONDS.sleep(2L);
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. end");
} catch (Exception e) {
e.printStackTrace();
logger.info(DateUtil.now() + " " + Thread.currentThread().getName() + " hello world. exception end..");
}
return "Processing result";
}