我的项目中有一个类widgetController,我必须调用它的方法,使用spring timerTask每5分钟重复一次。现有代码就是这样......
@Controller
@RequestMapping(value = "/widget/**")
public class WidgetController {
@SuppressWarnings("unchecked")
@Timed
@RequestMapping(value = "/loadProductsRailWidget/", method = RequestMethod.GET)
public ModelAndView getProductsRailWidget(){
/////some code here
return modelAndView;
}
}
现在我在application-context.xml中创建了必需的条目,
<bean id ="widgetController" class="com.atul.web.controller.WidgetController">
</bean>
<bean id="timerTaskFactoryBean"
class="org.springframework.scheduling.timer.MethodInvokingTimerTaskFactoryBean">
<property name="targetObject" ref="widgetController"></property>
<property name="targetMethod" value="getProductsRailWidget"></property>
</bean>
<bean id="timerTask"
class="org.springframework.scheduling.timer.ScheduledTimerTask">
<property name="timerTask" ref="timerTaskFactoryBean"></property>
<property name="period" value="300000"></property>
</bean>
<bean class="org.springframework.scheduling.timer.TimerFactoryBean">
<property name="scheduledTimerTasks">
<list>
<ref local="timerTask"></ref>
</list>
</property>
</bean>
现在我已经使用虚拟类TestRepeat而不是现有的控制器类测试了上面的配置,它运行正常。但无法调用控制器的方法。我是初学者,所以不知道如何实现这一点,在我的项目早期,WidgetController没有在application-context.xml中输入,但它的方法是使用url“/ widget / loadProductsRailWidget /”从* .jsp调用的。
现在如何实现这一点,请让我知道一些解决方案。
答案 0 :(得分:0)
虽然WidgetController
是一个Spring托管bean,但它的主要目的是响应与RequestMapping
中指定的模式匹配的http请求。因此,只有在getProductsRailWidget
向您的网络应用程序发送http请求时,方法/widget/loadProductsRailWidget/
中的代码才会运行。如果您想使用计时器多次运行此方法,则可能需要一种机制(例如,使用在浏览器中运行的javascript计时器代码)多次发送请求。有关使用Spring任务计划程序运行代码的其他方法,请查看here。