これがスケジューリング設定です
@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
私は何かが欠けていますか
Java構成を使用している場合、使用するスケジューラのタイプに@Bean定義が必要です。SpringにはこのためのデフォルトBeanがありません。たとえば、
@Bean
public TaskScheduler taskScheduler() {
return new ConcurrentTaskScheduler(); //single threaded by default
}
私は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"/>
と同等の注釈が必要です