我有一個REST
web服務,並希望記錄任何傳入和傳出XML
請求。 因爲它們可能非常大,我也必須應用某種轉換,所以我想在異步線程中執行它。哪個TaskExecutor用於異步日誌記錄?
到目前爲止,我只是在記錄器方法上使用了@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;
}
我應該將'corePoolSize'還是'maxPoolSize'設置爲處理器數量?或兩者? – membersound
maxPoolSize。如果你不想將它作爲FixedThreadPool處理,請設置這兩個值。 –
如果我開始例如'corePoolSize = 1':它何時會增加?如果一個過程仍在進行中?因此,如果我有4個併發日誌語句,它們會直接記錄在4個核心/線程上嗎?或者它們會堆棧在pool1的隊列中,因爲只有當該池的隊列已滿時,poolSize纔會增加? (並且afaik隊列在ThreadPoolTaskExecutor中默認是無效的?) – membersound