Todos los productos
Search
Centro de documentos

SchedulerX:Preguntas frecuentes sobre trabajos de Spring

Última actualización: Sep 05, 2026

¿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:

  1. Busque en su proyecto cualquier clase que implemente SchedulingConfigurer.

  2. Compruebe si se invoca el método setScheduler de ScheduledTaskRegistrar.

  3. 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

ProcessResult

Devolver un estado de éxito o fallo junto con un mensaje de resultado

String

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";
}