Как я могу выключить пулы исполнителей / планировщиков задач Spring перед всеми другими bean-компонентами в веб-приложение уничтожено?

В веб-приложении Spring у меня есть несколько компонентов DAO и уровня обслуживания. Один компонент уровня сервиса имеет аннотации к методам @Async / @Scheduled. Эти методы зависят от других (автоматически подключенных) bean-компонентов. Я сконфигурировал два пула потоков в XML:


     
     
     
     
     
            
        
    


     
     
     
            
        
    

    

Все работает, как ожидалось. Моя проблема в том, что я не могу полностью завершить работу пулов задач.Задачи работают с базой данных и файловой системой. Когда я останавливаю веб-приложение, требуется некоторое время, пока оно не остановится. Это означает, что свойство waitForTasksToCompleteOnShutdown работает. Однако в журнале появляется IllegalStateExceptions, указывающий на то, что некоторые bean-компоненты уже уничтожены, но некоторые потоки рабочих задач все еще выполняются, и они терпят неудачу, потому что их зависимости уничтожены.

Существует проблема JIRA, которая может иметь отношение: SPR- 5387

Мой вопрос: есть ли способ указать Spring инициализировать бины исполнителя / планировщика задач последними или есть способ указать Spring уничтожить их первыми?

Насколько я понимаю, разрушение происходит при обратной инициализации порядок. Следовательно, бин, инициализированный последним, будет уничтожен первым. Если сначала будут уничтожены компоненты пула потоков, все выполняемые в данный момент задачи будут завершены и все еще смогут получить доступ к зависимым bean-компонентам.

Я также пробовал использовать атрибут зависимости в пулах потоков, ссылаясь на мой служебный компонент, который имеет @Async и @ Запланированные аннотации. Похоже, тогда они никогда не выполняются, и я не получаю ошибок инициализации контекста. Я предполагаю, что аннотированный служебный компонент каким-то образом нуждается в инициализации этих пулов потоков в первую очередь, и если я использую зависимости от, я меняю порядок и делаю их нефункциональными.

43
задан tvirtualw 6 July 2011 в 21:10
поделиться