0

サーブレット 3.0、Spring 3、およびその他のもので Java Web プロジェクトを構築しています。Spring の @Sheduled タスクを使用しようとしています。
正常に動作していますが、Tomcat から戦争をアンデプロイすると、スケジュールされたタスクが引き続き実行されます。Spring Container destroy で停止するにはどうすればよいですか?

更新 問題の根本原因を見つけました-Springコンテキストを2回インスタンス化しました。web.xml で初めて

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

次のようなコードの2番目のもの:

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

そのため、SheduledProcessor の 2 つのインスタンスが作成され、そのうちの 1 つが破棄されました。そのため、春は認識しているものを破壊し、2番目は実行を続け、何も破壊されていないと思います。ClassPathXmlApplicationContext を削除すると、問題が解決しました。

コントローラー.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");

    }

}


spring-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>

ログファイル出力:

2013 年 7 月 3 日 11:32:34,436 [情報] (ScheduledProcessor.process:17)-> 処理タスク
11:33:04,439 [情報] (ScheduledProcessor.process:17)-> 処理タスク
2013 年 7 月 11:33:06,913 [情報] ] (XmlWebApplicationContext.doClose:1042)-> 名前空間 'Test-servlet' の WebApplicationContext を閉じています: 起動日 [2013 年 7 月 3 日水曜日 11:32:21 EEST]; コンテキスト階層のルート 2013 年 7 月 03 日 11:33:06,914 [INFO]
(DefaultListableBeanFactory.destroySingletons:444)-> org.springframework.beans.factory.support.DefaultListableBeanFactory@1a56058 でシングルトンを破棄: Bean の定義 [scheduledProcessor,receiverController,org. springframework.context.annotation.internalConfigurationAnnotationProcessor など。ファクトリ階層のルート **
2013 年 7 月 3 日 11:33:34,440 情報 -> 処理タスク
2013 年 7 月 3 日 12:34:0,440 情報 -> 処理タスク

4

0 に答える 0