2011-01-27 5 views
13

J'ai un problème avec l'annotation de printemps du planificateur de tâches à base - je ne peux pas le faire fonctionner, je ne vois pas de problème ici ...Spring ne fonctionne pas

application context.xml

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

haricot

@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

Je ne reçois aucune erreur et je m'attends à enregistrer le message '>>> service de test programmé <<<' qui ne se produit pas ... – user219882

+1

votre logger est-il configuré correctement, avec le bon niveau de journalisation? –

Répondre

21

Si vous souhaitez utiliser l'approche task:annotation-driven et que votre annotation @Scheduled ne fonctionne pas, alors vous avez probablement raté context:component-scan dans votre contexte xml. Sans cette ligne, le printemps ne peut pas deviner où rechercher vos annotations.

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

Vous m'avez sauvé la vie Serkan Arikusu! Pouces vers le haut! – TchiYuan

3

J'ai finalement trouvé une solution.

application context.xml

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

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

et la méthode test() sans l'annotation. Cela lance la méthode chaque seconde et fonctionne parfaitement.

+1

Cela fonctionne sûrement depuis que vous avez quitté l'approche 'task: annotation-driven'. Vous regardez mon autre réponse pour la ligne manquante. Cheers –

1

Vous devriez également vérifier-init paresseux pour être faux pour le grain de café ou utiliser default-lazy-init="false" dans les haricots.

Cela a résolu mon problème.

22

Spring @Configuration (non-xml configuration) for annotation-driven tasks

Il suffit d'ajouter @EnableScheduling sur vous WebMvcConfig classe

@Configuration 
@EnableWebMvc 
@EnableAsync 
@EnableScheduling 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 
    /** Annotations config Stuff ... **/ 
} 
+0

L'ajout de @EnableScheduling m'a beaucoup permis de gagner du temps. Merci beaucoup –

0

Ceci se produit car par défaut Spring paresseux initialise les haricots.

Désactivez l'initialisation paresseuse pour le haricot en plaçant cette annotation

@Lazy(false) 

au-dessus de votre @Component.

0

Nous avions la raison suivante: Le service avait besoin d'une interface (en raison d'une annotation de transaction) - IDE a ajouté cette annotation tx également à l'interface. Mais @Scheduled était dans l'implémentation de la classe de service - et Spring l'a ignoré car il pensait que seules les annotations existaient sur l'interface. Veillez donc à n'avoir que des annotations sur l'implémentation des classes!

Questions connexes