2011-01-27 24 views
13

Tengo un problema con la anotación del programador de tareas basada en la primavera - No puedo conseguir que funcione, no veo ningún problema aquí ...Programador de primavera no funciona

aplicación context.xml

<task:scheduler id="taskScheduler" /> 
<task:executor id="taskExecutor" pool-size="1" /> 
<task:annotation-driven executor="taskExecutor" scheduler="taskScheduler" /> 

frijol

@Service 
public final class SchedulingTest { 

    private static final Logger logger = Logger.getLogger(SchedulingTest.class); 

    @Scheduled(fixedRate = 1000) 
    public void test() { 
     logger.debug(">>> Scheduled test service <<<"); 
    } 

} 
+0

No obtengo ningún error y espero registrar el mensaje '>>> Servicio de prueba programado <<<' que no ocurre ... – user219882

+1

¿su registrador está configurado correctamente, con el nivel de registro correcto? –

Respuesta

21

Si desea utilizar el enfoque task:annotation-driven y su anotación @Scheduled no funciona, entonces es muy probable que haya perdido context:component-scan en su contexto xml. Sin esta línea, Spring no puede adivinar dónde buscar sus anotaciones.

<context:component-scan base-package="..." /> 
+1

¡Me salvaste la vida Serkan Arikusu! ¡Pulgares hacia arriba! – TchiYuan

3

que finalmente encontró una solución.

aplicación context.xml

<bean id="schedulingTest" class="...SchedulingTest" /> 

<task:scheduled-tasks> 
    <task:scheduled ref="schedulingTest" method="test" cron="* * * * * ?"/> 
</task:scheduled-tasks> 

y el método test() sin la anotación. Esto ejecuta el método cada segundo y funciona perfectamente.

+1

Esto seguramente funciona desde que sacaste el enfoque 'task: annotation-driven'. Usted mira la otra respuesta para la línea que falta. Cheers –

1

También debe comprobar perezoso-init es falsa para que el frijol o uso default-lazy-init="false" en los granos.

Eso resolvió mi problema.

0

Esto sucede porque la primavera predeterminado perezoso inicializa los granos.

inicialización perezosa de bloqueo para el grano mediante la colocación de esta anotación

@Lazy(false) 

encima de su @Component.

0

Tuvimos la siguiente razón: El servicio necesitaba una interfaz (debido a la anotación de Transacción) - IDE agregó esta anotación tx también a la interfaz. Pero @Scheduled estaba implementando la clase de servicio, y Spring lo ignoró, ya que pensó que solo existían anotaciones en la interfaz. ¡Así que tenga cuidado de tener solo anotaciones sobre la implementación de clases!

Cuestiones relacionadas