java - 如何为特定进程指定线程池
问题描述
我的配置正在实现 AsyncConfigurer,如下所示:
@Configuration
@EnableAsync
public class AsyncConfiguration implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(5);
executor.setCorePoolSize(5);
executor.setQueueCapacity(500);
executor.initialize();
return executor;
}
新的线程池可以正常工作:
@Component
public class MessageJmsListener {
@Async
@EventListener
public void onApplicationEvent(CustomMessage messageJmsWrapper) {
log.info("Current thread: {}", Thread.currentThread().getName());
}
@Async
@EventListener
public void onApplicationEventSecond(SecondCustomMessage messageJmsWrapper) {
log.info("Second Listener thread: {} , Thread.currentThread().getName());
}
}
我想实现这样的效果,即对于第一个侦听器,我给一个单独的 bean(线程数),而对于第二个侦听器。这样的事情可能吗?
提前致谢!此致
解决方案
看起来使用限定符可以帮助你。创建两个不同的执行器并为每个执行器添加不同的限定符。将第一个用于具有一个参数集的第一个侦听器,将第二个用于具有不同参数集的另一个侦听器。请参阅此线程中的示例。
在您的情况下,另一种方法可能是您通过在调用它的注释中添加执行器名称来调用正确的执行器。例子:
@Configuration
@EnableAsync
class ApplicationAsyncConfiguration {
@Bean(name = "maxThreadingExecutor")
public Executor maxThreadingExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(5);
executor.setCorePoolSize(5);
executor.setQueueCapacity(500);
executor.initialize();
return executor;
}
@Bean(name = "defaultExecutor")
public Executor defaultExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setMaxPoolSize(2);
executor.setCorePoolSize(2);
executor.setQueueCapacity(500);
executor.initialize();
return executor;
}
}
@Component
public class MessageJmsListener {
@Async("maxThreadingExecutor")
@EventListener
public void onApplicationEvent(CustomMessage messageJmsWrapper) {
log.info("Current thread: {}", Thread.currentThread().getName());
}
@Async("defaultExecutor")
@EventListener
public void onApplicationEventSecond(SecondCustomMessage messageJmsWrapper) {
log.info("Second Listener thread: {}", Thread.currentThread().getName());
}
}
在此答案中查看更多信息,可能会有所帮助。
推荐阅读
- ios - 如何在视图边框的随机位置上绘制圆圈
- postgresql - postgres 函数返回运算符不存在整数 - 时间戳
- python - Pycharm Python控制台输出与终端python shell输出
- python - 带有自动完成字段的 Django Admin Tabularinline
- c# - 我试图做一个 fnaf 风格的相机运动,但我不能左转或限制转弯
- gdb - 将变量设置为gdb中框架的地址?
- blazor - 如何区分 CSB 应用程序和托管 CSB
- c++ - 其中 2 个之间的 ESP32 串行通信
- python-3.x - 熊猫删除不包含字符串列表的行
- forms - 谷歌表单在信号提交时发送重复的电子邮件