2016-03-24 16 views
6

Springの@ScheduledcronコンフィギュレーションのpropertyClassからゲッター(または変数)を呼び出す方法はありますか?以下はコンパイルされません:スプリングブート@スケジューリングされたcron

@Scheduled(cron = propertyClass.getCronProperty())または@Scheduled(cron = variable)

を私が直接施設をつかん避けたい:/src/main/resources/application.propertiesで

@Scheduled(cron = "${cron.scheduling}") 
+0

この値を取得するBeanを作成したら、そのBeanをcronクラスにオートワイヤリングするのはどうですか? – mugua

+0

propertyClassはBeanか、静的メソッドを含むクラスだけですか? –

+0

@KenBekov a bean。 – ltalhouarne

答えて

5

短い回答 - それは可能ではありませんeを箱から出してください。

@Scheduledアノテーションの「cron式」として渡される値は、StringValueResolverインターフェイスのインスタンスを使用してScheduledAnnotationBeanPostProcessorクラスで処理されます。 Placeholderのための(例えば、$ {})、Embedded値のためとStatic弦楽のため - - あなたが探しているものを達成することができたのどれ

StringValueResolverは、ボックスのうち3つの実装を持っています。

アノテーションのプロパティプレースホルダを使用しないで避けなければならない場合は、アノテーションを取り除き、プログラムですべてを構築します。 ScheduledTaskRegistrarを使用してタスクを登録することができます。これは、@Scheduled注釈が実際に行うものです。

私は、テストに合格し、合格する最も簡単な解決法を使用することを提案します。

+0

これは私が実現したものです。ありがとう! – ltalhouarne

-2
@Component 
public class MyReminder { 

    @Autowired 
    private SomeService someService; 

    @Scheduled(cron = "${my.cron.expression}") 
    public void excecute(){ 
     someService.someMethod(); 
    } 
} 

my.cron.expression = 0 30 9 * * ? 
+0

これは私の現在のコードです。私の質問は、 '$ {my.cron.expression} 'の代わりに変数またはゲッターを使用することです。 – ltalhouarne

関連する問題