web-dev-qa-db-ja.com

ScheduledExecutorServiceタイプの適格なBeanはありません| TaskScheduler

これがスケジューリング設定です

@Configuration
@EnableScheduling
public class RWInventorySchedule {

protected org.slf4j.Logger log = LoggerFactory.getLogger(RWInventorySchedule.class);

@PersistenceContext
private EntityManager entityManager;


   @Bean
   public RWInventoryProcessor constructInventoryProcessor() {
       log.debug("RWInventorySchedule constructs InventoryProcessor, entityManager : {} " , entityManager);
       return new RWInventoryProcessor(entityManager);
    }
}

インベントリプロセッサは次のとおりです

public class RWInventoryProcessor  {
 ...
 @Scheduled(fixedRate = 5000,initialDelay = 3000)
 @Transactional
 public void runProcess() {
   ...
 }
}

実行中に、デバッグログで次のエラーを取得します

DEBUG org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor-デフォルトのTaskScheduler Bean org.springframework.beans.factory.NoSuchBeanDefinitionExceptionが見つかりませんでした:利用可能なタイプ 'org.springframework.scheduling.TaskScheduler'のBean

...
DEBUG org.springframework.scheduling.annotation.ScheduledAnnotationBeanPostProcessor-デフォルトのScheduledExecutorService Bean org.springframework.beans.factory.NoSuchBeanDefinitionExceptionが見つかりませんでした:利用可能なタイプ 'Java.util.concurrent.ScheduledExecutorService'のBean

私は何かが欠けていますか

7
vels4j

Java構成を使用している場合、使用するスケジューラのタイプに@Bean定義が必要です。SpringにはこのためのデフォルトBeanがありません。たとえば、

@Bean
public TaskScheduler taskScheduler() {
    return new ConcurrentTaskScheduler(); //single threaded by default
}
17
Adam

私はxml Spring Configurationのこのフォームを使用しました:

<task:annotation-driven  executor="executor" />

<task:scheduler id="scheduler" pool-size="10"/>

<task:executor id="executor" pool-size="7"/>

コンポーネントプロセッサは次のとおりです。

@Component
public class QueueConsumer {

    @Autowired
    ProcessQueue queue;

    @Autowired
    TaskProcessor processor;

    @Autowired
    TaskResultRepository resultRepository;

    @Scheduled(fixedDelay = 15000)
    public void runJob() {
        ProcessTask task = queue.poll();
        ...
    }
}

<task:scheduler id="scheduler" pool-size="10"/>と同等の注釈が必要です

0
rvillablanca