gpt4 book ai didi

java - Spring 4 中 ScheduledExecutorFactoryBean 的替代方案

转载 作者:行者123 更新时间:2023-11-30 08:14:33 24 4
gpt4 key购买 nike

我们将项目的spring版本从3.2.7升级到4.0.6,发现org.springframework.scheduling.timer.TimerFactoryBean类在spring 4.0.6中不再存在。我尝试了这里提到的解决方案 stackOverflowSolution 。但这对我不起作用。

这是我尝试过的。在其中一个上下文 xml 中,我有以下 bean

<bean id="timerFactory" class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<!-- leave empty -->
</list>
</property>
</bean>

根据链接中提到的解决方案,我更改了 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: 名为 'timerFactory' 的 Bean 必须是 [java.util.Timer] 类型,但实际上是 [java.util.concurrent.beans] 类型。 ScheduledThreadPoolExecutor]

请告诉我需要进行哪些修改才能使此代码与 Spring 4 兼容

最佳答案

成功了。在bean声明中timerFactory bean 被声明为 org.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean 类型,但我试图将其转换到 java.util.Timer这首先是错误的。然后我尝试将其转换到 ScheduledExecutorFactoryBean这仍然不起作用。这是因为ScheduledExecutorFactoryBean是一个 Spring Factory bean。这意味着它旨在创建目标类型的对象,而不是其自身的实例。在本例中,目标类型为 ScheduledExecutorFactoryBeanorg.springframework.scheduling.concurrent.ScheduledExecutorFactoryBean所以我投了timerFactory bean 类型 ScheduledExecutorFactoryBean这有效。以下是修改后的代码行

 ScheduledThreadPoolExecutor timer = 
(ScheduledThreadPoolExecutor) context.getBean("timerFactory",
ScheduledThreadPoolExecutor.class);

关于java - Spring 4 中 ScheduledExecutorFactoryBean 的替代方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29850049/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com