我有一个REST and服务,并希望记录任何传入和传出的XML请求。由于它们可能很大,而且我还必须应用某种类型的转换,所以我想在异步线程中执行。
到目前为止,我只是在记录器方法上使用@Async注释。它将使用默认的SimpleAsyncTaskExecutor,它“不重用任何线程”:https://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#scheduling-task-executor-types
问:我应该定义自己的ThreadPoolTaskExecutor,而不是依赖默认的简单执行器吗?让一个“重用线程”执行器来执行短期日志任务是明智的吗?
进一步考虑:我还将有一些异步数据库行更新,这些更新也应该使用@Async执行,而且可能使用相同的executor。
我的主要问题是:我不想考虑线程的固定池大小、容量、节流限制等等。我只想告诉我的例程:“在异步线程中执行以下逻辑。”把任何东西堆在上面。
我必须为它使用哪一个TaskExecutors,以及应该应用哪种配置?
下面的执行者合适吗?
@Bean
public ThreadPoolTaskExecutor asyncExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4);
return executor;
}发布于 2017-10-13 05:28:41
我应该定义自己的ThreadPoolTaskExecutor,而不是依赖默认的简单执行器吗?
使用默认的ThreadPoolTaskExecutor,除非您需要自定义它。
让一个“重用线程”执行器来执行短期日志任务是明智的吗?
是。
我不想考虑线程的固定池大小、容量、节流限制等等,我只想告诉我的例程:“在异步线程中执行以下逻辑。”把任何东西堆在上面。 我必须为它使用哪一个TaskExecutors,以及应该应用哪种配置?
ThreadPoolTaskExecutor已经足够好了。在示例代码中将池大小设置为Runtime.getRuntime().availableProcessors()。
发布于 2017-10-12 14:05:55
ThreadPoolTaskExecutor适合你的问题。例如:
https://stackoverflow.com/questions/46706964
复制相似问题