2011-08-01 15 views
6

誰もXML設定なしで@Scheduledアノテーションを使用してタスクの基本構成を達成する方法を説明できますか?私が見つけることができるすべての例は、少なくとも最小限のXML設定を使用しています。たとえば、次のようにアノテーション駆動型タスク用の@Configuration(非XML構成)

http://blog.springsource.com/2010/01/05/task-scheduling-simplifications-in-spring-3-0/

は、これは典型的なを使用しています。

<context:component-scan base-package="org/springframework/samples/task/basic/annotation"/> 
    <task:annotation-driven/> 

は、だから、僕は@Bean注釈の束と@Configurationアノテーションを使用しています。それらはすべて起動時にインスタンス化されますが、@ Scheduledを持つインスタンスは実行されません。私は過去にXML設定を使用したときにその注釈を使用しましたが、注釈のみでは使用できませんでした。

答えて

4

<task:annotation-driven />注釈は、ScheduledAnnotationBeanPostProcessorを宣言し、コード内の@Scheduled注釈を読み取ることになります。ここをクリックしてください:http://static.springsource.org/spring/docs/3.1.x/javadoc-api/org/springframework/scheduling/annotation/ScheduledAnnotationBeanPostProcessor.html

それは<task:annotation-driven />行を処理します。コンポーネントのスキャンを行うには、AnnotationConfigApplicationContextを使用する必要があります。確かに/どのようにWebコンテナで動作しますか。

+0

自分のリンクが3.1のドキュメントであっても、ScheduledAnnotationBeanPostProcessorも3.0用に存在することに注意してください。 – Kevin

+0

はい、@ @ConfigurationクラスのScheduledAnnotationBeanPostProcessorを\ @Beanとして宣言することは機能しているようです。つまり、アノテーション主導のタスクを実行します。 – david

3

Spring 3.0では、少しでもXMLが必要です。しかし、Spring 3.1(まだベータ版)では、ギャップを埋める追加のアノテーションオプションが導入され、XML設定の必要性が取り除かれています。

詳細については、this blog entryを参照してください。しかし、実動コードでSpringのベータ版を使用する前には、非常に注意してください。実際は不安定です。

15

だけ

@Configuration 
@EnableWebMvc 
@EnableAsync 
@EnableScheduling 
public class WebMvcConfig extends WebMvcConfigurerAdapter { 
    /** Annotations config Stuff ... **/ 
} 
+1

はい、Spring 3.1が利用可能になる前の質問でした。 – david

0

をあなたに@EnableScheduling WebMvcConfigクラスを追加答えは、これまでのすべての春の以前のバージョンのために役立ちます。 はここでもう少し仕立て春〜4だ一つだ:

@ComponentScan({"com.my.class"}) 

そしてそのパッケージの内側に、あなたがそのジョブ・クラスを持っている:

は、コンポーネントのための注釈付きメインアプリケーションのクラスは次のようにスキャンを持っていると仮定しますあなたは@Scheduledに注釈を付ける方法がvoidを返すと、あなたのcron式はどのようなお仕事をテストしますこれは、ここに示す例では、毎秒実行します(6つの文字を持っている必要があり、その必要があることを

@Configuration 
@EnableScheduling 
public class MyJobClass { 
@Scheduled (cron = "* * * * * *") 
public void runJob() throws DocumentException { 
    thingsToDoOnSchedule(); 
    } 
} 

注:このようになります。簡単です)。

また、@Configurationと@EnableSchedulingの両方のクラスレベル注釈が必要です。どちらかというと、無視されるようです。

さらに詳しい説明はSpring 4 Enable Scheduling Reference Docです。

関連する問題