如何在Tomcat7上停止Spring @Scheduled任务?

时间:2013-07-03 08:58:16

标签: java spring tomcat

我正在Servlet 3.0,Spring 3和其他一些东西上构建Java Web Project。 我正在尝试使用Spring的@Sheduled任务  它工作正常,但当我从Tomcat取消部署战争时,计划任务继续运行。如何在Spring Container上阻止它?

更新  我发现问题的根源是什么 - 我实例化了Spring上下文两次。第一次在web.xml中作为

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
    /WEB-INF/spring/servlet-context.xml
</param-value>
</context-param>

和代码中的第二个:

 context =  new ClassPathXmlApplicationContext(new String[] 
 {"/WEB-INF/spring/servlet-     context.xml",   "/WEB-INF/spring/beans.xml"});

因此创建了两个SheduledProcessor实例,其中一个被销毁。所以春天摧毁了它所知道的一个,第二个继续运行让我认为没有任何东西被摧毁。 删除ClassPathXmlApplicationContext解决了我的问题。

Controller.java

package a.b.c;
imports...

@Controller
@RequestMapping("/")
public class ReceiverController {

    @RequestMapping(method = RequestMethod.GET)
    public String welcome(ModelMap model) {
        new ClassPathXmlApplicationContext("config.xml", ReceiverController.class);
        return "index";
    }


}


ScheduledProcessor.java

package a.b.c;

imports..

@Service
public class ScheduledProcessor   {

    private Logger logger = LoggerFactory.getLogger(ScheduledProcessor.class);

    @Scheduled(fixedDelay = 30000)
    public void process() {
        logger.info("Processing task");

    }

}


弹簧-config.xml中

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:task="http://www.springframework.org/schema/task"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task-3.0.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">

    <context:component-scan base-package="a.b.c"/>
    <task:annotation-driven/>

</beans>

日志文件输出:

  

03 Jul 2013 11:32:34,436 [INFO](ScheduledProcessor.process:17) - &gt;处理任务
  11:33:04,439 [INFO](ScheduledProcessor.process:17) - &gt;处理任务
  2013年7月11:33:06,913 [INFO](XmlWebApplicationContext.doClose:1042) - &gt;闭幕   命名空间'Test-servlet'的WebApplicationContext:启动日期[Wed   7月03日11:32:21 EEST 2013];上下文层次结构根据2013年7月3日   11:33:06,914 [INFO]
  (DefaultListableBeanFactory.destroySingletons:444) - &GT;销毁   单身人士   org.springframework.beans.factory.support.DefaultListableBeanFactory@1a56058:   定义bean   [scheduledProcessor,receiverController,org.springframework.context.annotation.internalConfigurationAnnotationProcessor等。;   工厂层级的根    **
2013年7月3日11:33:34,440 INFO - &gt;处理任务   
2013年7月3日12:34:0,440 INFO - &gt;处理任务

0 个答案:

没有答案