Sto utilizzando spring-boot
per impostare i valori predefiniti di primavera. Mi piacerebbe utilizzare il meccanismo @EnableScheduling
e pianificare le mie attività in modo condizionale.Come abilitare TaskScheduler in spring-boot?
Pertanto, devo implementare SchedulingConfigurer
e impostare TaskScheduler
esplicito.
Tuttavia, durante l'iniezione di TaskScheduler
, viene visualizzato il seguente errore. Ma perché spring-boot non fornisce automaticamente uno Scheduler di conseguenza?
@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);
}
}
Errore:
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
Avete cercare di configurazione scheduler tramite XML di configurazione? Per quanto mi riguarda, ho alcuni problemi con il modo di configurazione guidato dall'annotazione, ma va liscio con la configurazione xml. – sphinks
Perché non è così. Non tutti hanno bisogno di un programmatore e il rilevamento non è realmente possibile. Quindi dovrai aggiungere il tuo. –
Inoltre è un po 'strano che il tuo 'SchedulingConfigurer' sia un servizio, sarebbe più logico essere una classe' @ Configuration'. –