2016-07-13 5 views
2

使用@Scheduler

abstract class ScheduledProcess { 

    abstract List<String> fetchNewContent() 
    abstract List<String> cron() 

    //This SPeL doesn't work just stating what kind of expression I'm looking for 
    @Scheduled(cron='#{this.cron()}') 
    void persistContent(){ 
    doSomeStuffWithContent(fetchNewContent()) 
    } 

} 

は、私の目標は、自分自身がすべてのサブクラスで@Scheduledメソッドを実装する必要が繰り返さないことです。 cron()メソッドは、特定のサブクラスcron式を返します。しかし、私は、注釈にcron値を渡す方法を見つけていません。たぶん私はちょうどこの問題を間違った方法で見ているだけです。

+0

あなたが上手の込んだ – reos

答えて

0

SpELを使用することはできません。プロパティプレースホルダ${...}のみが使用できます。

+0

を取得している例外/スタックトレース/エラーがなぜSPELを使用することはできません追加してください? @Scheduledアノテーション固有の制限はありますか?プロパティプレースホルダを使用すると、私は自分が望むものをどのように達成できるのでしょうか? – rsilva4

+1

単に 'ScheduledAnnotationBeanPostProcessor'がSpEL式を評価するロジックを持たないということです。そのようなロジックは、現在のBeanを '#root'評価オブジェクトとして追加する必要があります(または、'#currentBean'のようなSpEL変数として利用可能になります)。いいえ、プレースホルダを使用して行うことはできません。独自のBeanポストプロセッサを作成し、それを標準プロセッサの代わりに使用することもできます。 Springの内部構造とSpELをよく理解する必要があります。 –

関連する問題