Comment faire pour activer TaskScheduler au printemps-boot?
Je suis en utilisant spring-boot
pour configurer printemps valeurs par défaut.
Je voudrais utiliser le @EnableScheduling
mécanisme, et de planifier mes tâches conditionnelles.
Je dois donc mettre en œuvre SchedulingConfigurer
et définir TaskScheduler
explicite.
Mais lors de l'injection de la TaskScheduler
, j'obtiens l'erreur suivante. Mais pourquoi ne pas le printemps-démarrer automatiquement à fournir un Planificateur en conséquence?
@Configuration
@EnableAutoConfiguration
@EnableScheduling
public class AppConfig {
}
@Service
public class JobService implements SchedulingConfigurer {
@Autowired
private TaskScheduler taskScheduler;
//schedule the task dynamically
@Override
public void configureTasks(ScheduledTaskRegistrar taskRegistrar) {
taskRegistrar.setScheduler(taskScheduler); //fails
taskRegistrar.addTriggerTask(task, trigger);
}
}
Erreur:
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.scheduling.TaskScheduler; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.scheduling.TaskScheduler] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
... 15 more
Caused by: org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [org.springframework.scheduling.TaskScheduler] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
at org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
... 17 more
Avez vous essayez la configuration du planificateur via xml de config? Quant à moi j'ai quelques problèmes avec l'annotation de configuration, mais il va en douceur avec xml de config.
Parce qu'il ne l'est pas. Pas tout le monde a besoin d'un planificateur et la détection n'est pas vraiment possible. Donc, vous allez ajouter votre propre.
Il est aussi un peu étrange que votre
Parce qu'il ne l'est pas. Pas tout le monde a besoin d'un planificateur et la détection n'est pas vraiment possible. Donc, vous allez ajouter votre propre.
Il est aussi un peu étrange que votre
SchedulingConfigurer
est un service, le plus logique est de être un @Configuration
classe.OriginalL'auteur membersound | 2015-02-11
Vous devez vous connecter pour publier un commentaire.
Vous n'avez pas besoin de définir un planificateur sur la
ScheduledTaskRegistrar
. Si l'on n'a pas été configuré, il est par défaut unConcurrentTaskScheduler
qui encapsule un seul thread prévu exécuteur testamentaire:Si vous êtes heureux avec ce défaut planificateur, vous pouvez supprimer votre permettra à l'autowiring de
TaskScheduler
et l'appel d'un sur leScheduledTaskRegistrar
. Aussi, comme la Martre est suggéré dans les commentaires, vous devriez faire de votreSchedulingConfigurer
une configuration de classe plutôt qu'à un service.Ces changements laisser votre code à la recherche de quelque chose comme ceci:
OriginalL'auteur Andy Wilkinson