Мы обновили весеннюю версию нашего проекта с 3.2.7 до 4.0.6 и обнаружили, что класс org.springframework.scheduling.timer.TimerFactoryBean больше не существует. Spring 4.0.6. Я попробовал решение, упомянутое здесь stackOverflowSolution. Но это не работает для меня.Alternate для ScheduledExecutorFactoryBean весной 4
Вот что я пробовал. В одной из контекста XML я следующие фасоли
<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean"> <property name="scheduledTimerTasks"> <list> <!-- leave empty --> </list> </property> </bean>
Согласно решению, указанного в ссылке я изменил определение бина, как показано ниже, чтобы использовать org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean
<bean id="timerFactory" class="org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean">
<!-- <property name="scheduledTimerTasks"> -->
<property name="scheduledExecutorTasks">
<list>
<!-- leave empty-->
</list>
</property>
</bean>
Но это решение не работает для меня, потому что следующий код разрушается из-за типа литой
ProcessInitiatorTask timerTask = (ProcessInitiatorTask) context.getBean("initiateProcessesTask", ProcessInitiatorTask.class);
event.getServletContext().setAttribute("CURRENT_TASK", timerTask);
timerTask.init(config);
// Code will break at below line
Timer timer = (Timer) context.getBean("timerFactory", Timer.class);
timer.schedule(timerTask, 10000L, config.getPeriod().longValue() * 60 * 1000);
Когда я запускаю этот код, я получаю org.springframework.beans.factory.BeanNotOfRequiredTypeException: Bean с именем 'timerFactory' должен иметь тип [java.util.Timer], но был фактически типом [java.util.concurrent.ScheduledThreadPoolExecutor]
Пожалуйста, дайте мне знать, какие изменения мне нужно сделать, чтобы сделать этот код работать с Spring 4