SpringBootで複数のスレッドプールを作成する方法は?

Spring Boot内で複数のスレッドプールを作成するには、Javaの設定クラスを使用して実装することができます。最初に、次のような設定クラスを作成します:

@Configuration
public class ThreadPoolConfig {

    @Bean("threadPoolA")
    public ExecutorService threadPoolA() {
        return Executors.newFixedThreadPool(10);
    }

    @Bean("threadPoolB")
    public ExecutorService threadPoolB() {
        return Executors.newFixedThreadPool(10);
    }
}

上記の例では、threadPoolAとthreadPoolBという2つのスレッドプールを定義しました。実際のニーズに合わせて、スレッドプールの名前や属性をカスタマイズすることができます。

次に、スレッドプールを使用する場合は、@Qualifierアノテーションを使用して使用するスレッドプールを指定します。次のようになります:

@Service
public class MyService {

    @Autowired
    @Qualifier("threadPoolA")
    private ExecutorService threadPoolA;

    @Autowired
    @Qualifier("threadPoolB")
    private ExecutorService threadPoolB;

    // 使用threadPoolA执行任务
    public void executeTaskA() {
        threadPoolA.execute(() -> {
            // 执行任务逻辑
        });
    }

    // 使用threadPoolB执行任务
    public void executeTaskB() {
        threadPoolB.execute(() -> {
            // 执行任务逻辑
        });
    }
}

上記の例では、@Autowiredと@Qualifierアノテーションを使用して、スレッドプールをMyServiceクラスに注入し、executeTaskAおよびexecuteTaskBメソッドで異なるスレッドプールを使用してタスクを実行しています。

注意すべきことは、作成したスレッドプールを使用後は手動で閉じる必要があります。リソースリークを防ぐためです。Spring Bootのライフサイクルに破棄メソッドを追加してスレッドプールを閉じることができます。以下に示します。

@Configuration
public class ThreadPoolConfig {

    // 省略其他代码

    @PreDestroy
    public void destroy() {
        threadPoolA.shutdown();
        threadPoolB.shutdown();
    }
}

例の中で、@PreDestroyアノテーションを使用してdestroyメソッドをマークしました。Spring Bootが停止すると、このメソッドが自動的に呼び出され、スレッドプールが閉じられます。

bannerAds