web-dev-qa-db-ja.com

春のブーツ。注釈付きでTaskExecutorを作成する方法は?

私は@Service非同期に実行するメソッドの1つを持つSpring Bootアプリケーションのクラス。私が読んだようにメソッドは@Async注釈付きで、TaskExecutor Beanも実行する必要があります。しかし、Springマニュアルでは http://docs.spring.io/spring/docs/current/spring-framework-reference/html/scheduling.htmlTaskExecutorアノテーション付き、XML構成なし。 XMLなしで、注釈のみでSpring BootでTaskExecutor Beanを作成することは可能ですか?ここに私のサービスクラス:

@Service
public class CatalogPageServiceImpl implements CatalogPageService {

    @Override
    public void processPagesList(List<CatalogPage> catalogPageList) {
        for (CatalogPage catalogPage:catalogPageList){
            processPage(catalogPage);
        }
    }

    @Override
    @Async("locationPageExecutor")
    public void processPage(CatalogPage catalogPage) {
        System.out.println("print from Async method "+catalogPage.getUrl());
    }
}
20
Pavlo

@BeanメソッドをSpring Bootアプリケーションクラスに追加します。

@SpringBootApplication
@EnableAsync
public class MySpringBootApp {

    @Bean
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(5);
        executor.setMaxPoolSize(10);
        executor.setQueueCapacity(25);
        return executor;
    }

    public static void main(String[] args) {
        // ...
    }
}

XMLの代わりにJava configを使用してSpringを構成する方法については、Spring Frameworkリファレンスドキュメントの Javaベースのコンテナー構成 を参照してください。

(注:@Configurationにはすでに@SpringBootApplicationが含まれているため、@Configurationをクラスに追加する必要はありません。

34
Jesper

最初に-ルールを見てみましょう-@Asyncには2つの制限があります:

  • パブリックメソッドにのみ適用する必要があります
  • 自己呼び出し–同じクラス内から非同期メソッドを呼び出す–は機能しません

したがって、processPage()メソッドは別のクラスにある必要があります

6
Igor Shevchenko