Class ExecutorConfiguration
ForkJoinPool-исполнители (в которых запускаются parallelStream()) создаются
per-workspace — каждый воркспейс получает свой набор пулов. Worker threads
устанавливают workspace URI в ThreadLocal при старте (onStart()),
что гарантирует корректную работу workspace-scoped proxy в fork-задачах.
Там же воркер получает своё имя — до регистрации в пуле его индекс ещё не известен.
Исключение: computeConfigurationExecutor — singleton, т.к. вызывает
внешнюю библиотеку MDClasses, не использующую ThreadLocal из BSL LS.
Остальные исполнители — короткоживущие обработчики запросов LSP без parallelStream()
внутри — реализуются через SimpleAsyncTaskExecutor в режиме виртуальных потоков
(setVirtualThreads(true)) с TaskDecorator для прокидывания контекста.
Методы с @Async исполняются на исполнителе, названном в аннотации. Исполнитель по
умолчанию не настроен: @Async без имени ушёл бы на исполнитель, который Spring
выберет сам, и без контекста workspace.
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionasyncEventListenerExecutor(TaskDecorator compositeTaskDecorator) compositeTaskDecorator(io.sentry.spring7.SentryTaskDecorator sentryDecorator, TaskDecorator contextPropagatingDecorator) platformTypesWarmupExecutor(TaskDecorator compositeTaskDecorator) io.sentry.spring7.SentryTaskDecoratorsentryExecutor(TaskDecorator compositeTaskDecorator) textDocumentServiceExecutor(TaskDecorator compositeTaskDecorator) workspaceServiceExecutor(TaskDecorator compositeTaskDecorator)
-
Constructor Details
-
ExecutorConfiguration
public ExecutorConfiguration()
-
-
Method Details
-
sentryDecorator
-
contextPropagatingDecorator
-
compositeTaskDecorator
@Bean public TaskDecorator compositeTaskDecorator(io.sentry.spring7.SentryTaskDecorator sentryDecorator, TaskDecorator contextPropagatingDecorator) -
textDocumentServiceExecutor
-
workspaceServiceExecutor
-
platformTypesWarmupExecutor
-
sentryExecutor
-
asyncEventListenerExecutor
-
populateContextExecutor
@Bean(destroyMethod="shutdown") @WorkspaceScope(proxyMode=INTERFACES) public ExecutorService populateContextExecutor() -
resolveReturnTypesExecutor
@Bean(destroyMethod="shutdown") @WorkspaceScope(proxyMode=INTERFACES) public ExecutorService resolveReturnTypesExecutor() -
computeConfigurationExecutor
-
diagnosticComputerExecutor
@Bean(destroyMethod="shutdown") @WorkspaceScope(proxyMode=INTERFACES) public ExecutorService diagnosticComputerExecutor() -
analyzeOnStartExecutor
@Bean(destroyMethod="shutdown") @WorkspaceScope(proxyMode=INTERFACES) public ExecutorService analyzeOnStartExecutor() -
semanticTokensExecutor
@Bean(destroyMethod="shutdown") @WorkspaceScope(proxyMode=INTERFACES) public ExecutorService semanticTokensExecutor() -
cliExecutor
@Bean(destroyMethod="shutdown") @WorkspaceScope(proxyMode=INTERFACES) public ExecutorService cliExecutor()
-