如何从Spring MVC中的application-context.xml调用控制器方法

时间:2015-03-03 09:05:22

标签: java spring-mvc scheduled-tasks

我的项目中有一个类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调用的。

现在如何实现这一点,请让我知道一些解决方案。

1 个答案:

答案 0 :(得分:0)

虽然WidgetController是一个Spring托管bean,但它的主要目的是响应与RequestMapping中指定的模式匹配的http请求。因此,只有在getProductsRailWidget向您的网络应用程序发送http请求时,方法/widget/loadProductsRailWidget/中的代码才会运行。如果您想使用计时器多次运行此方法,则可能需要一种机制(例如,使用在浏览器中运行的javascript计时器代码)多次发送请求。有关使用Spring任务计划程序运行代码的其他方法,请查看here

相关问题