4

我有一个REST网络服务,想记录任何传入和传出的XML请求。由于它们可能非常大,而且我还必须应用某种转换,我想在异步线程中执行它。

到目前为止,我只是@Async在记录器方法上使用注释。这将使用默认值SimpleAsyncTaskExecutor,即“不重用任何线程”: https ://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/#scheduling-task-executor-types

问题:我应该更好地定义自己的ThreadPoolTaskExecutor而不是依赖默认的简单执行器吗?为短期的日志记录任务设置一个“重用线程”执行器是否明智?

进一步考虑:我还将进行一些异步数据库行更新,这些更新也应该使用执行@Async,并且可能使用相同的执行程序。

我的主要问题是:我不想考虑线程池的固定大小、容量、油门限制等。我只想告诉我的例程:“在异步线程中执行以下逻辑。” 只需在上面堆放任何东西。

我必须使用哪个TaskExecutors,应该应用哪个配置?

例如,以下执行人适合吗?

@Bean
public ThreadPoolTaskExecutor asyncExecutor() {
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(4);
    return executor;
}
4

2 回答 2

1

我应该更好地定义自己的 ThreadPoolTask​​Executor 而不是依赖默认的简单执行器吗?

ThreadPoolTaskExecutor除非您需要自定义,否则请使用默认值。

为短期的日志记录任务设置一个“重用线程”执行器是否明智?

是的。

我不想考虑固定的线程池大小、容量、油门限制等。我只想告诉我的例程:“在异步线程中执行以下逻辑。” 只需在上面堆放任何东西。

我必须使用哪个 TaskExecutors,应该应用哪个配置?

ThreadPoolTask​​Executor已经足够好了。Runtime.getRuntime().availableProcessors()如示例代码中所示设置池大小。

于 2017-10-13T05:28:41.357 回答
0

ThreadPoolTask​​Executor 适合您的问题。例如

于 2017-10-12T14:05:55.197 回答