2016-07-02 3 views
1

かなり標準的なスプリングブート(1.3.5)アプリケーションがあります。スプリングブート、スケジュールされたタスク、ダブル呼び出し

メインアプリケーションのエントリポイントで試してみました@EnableScheduling(および@Configuration注釈付きクラスで有効なスケジューリング。@Scheduled方法(単純FIXEDDELAYスケジュールに単純なクラスを作成し

)。

スケジュールされたタスクが二回実行する(常に)私がこれまでに収集したものから。

、それは2つのコンテキストがロードされているので、おそらくあり、そしてthusly二回私の豆を拾う。 [OK]をクリックします。 、どのように私は、この二重のexecuを防ぐ/修正すればよいですすべての設定は基本的に隠されたスプリングブートの魔法ですか?

Frameworkのバージョン:

  • 春ブーツ1.3.5
  • 春クラウドブリクストンSR1

主な用途:

@SpringBootApplication 
    @EnableDiscoveryClient 
    @EnableAsync 
    @EnableCircuitBreaker 
    public class AlertsApplication { 

    public static void main(final String[] args) { 
     SpringApplication.run(AlertsApplication.class, args); 
    } 
} 

マイタスククラス(HookCreateRequestリストはに引っ張られますapplication.ymlから - 私は現在、関連性があるとは思わない必要に応じて提供することができます):

@ConditionalOnProperty(name = "init.runner", havingValue = "InitRunner") 
@ConfigurationProperties(prefix = "webhook") 
public class InitRunner /*implements CommandLineRunner*/ { 

    private final List<HookCreateRequest> receivers = new ArrayList<>(); 

    @Autowired 
    private WebHookService hookService; 

    @Scheduled (fixedRate = 300000) 
    public void run() throws Exception { 

     getReceivers().stream().forEach(item -> { 
      log.debug("Request : {}", item); 
      hookService.create(item); 
     }); 

    } 

    public List<HookCreateRequest> getReceivers() { 
     return receivers; 
    } 

} 

ゼロxml構成です。 ほかに関連性のあるものは何ですか?

EDIT 2016年7月4日

それが実行されるとき、私は(私は2つの異なるインスタンスが作成されたことが疑われる)出力にスケジュールされたインスタンスを変更しました。ただし、ログはタスクオブジェクトのSAMEインスタンスであることを示しているようです。 logs: 15:01:16.170 DEBUG - scheduled.ScheduleHookRecreation - Schedule task running: [email protected] ...task stuff happening ...first run completes, then: 15:01:39.050 DEBUG - scheduled.ScheduleHookRecreation - Schedule task running: [email protected] したがって、同じタスクインスタンス(@705a651b)であるように見えます。なぜ今は甘いものの名前で2回執行されるのだろうか?

EDIT 2016年7月5日

私はでちょうどいくつかのログ出力で、スケジュールされたメソッドを運ぶクラスに@PostConstructメソッドを追加しました。私は@PostConstructメソッドが呼び出されていることを確認できたことにすることでこれはおそらく2倍のスケジューラに送られることを意味します。だからこれを防ぐ方法は?

+0

あなたが提供した情報から非常に難しいです。問題の[最小で完全で検証可能な例](/ help/mcve)を共有できますか? –

+0

@AndyWilkinson fair - 十分な情報とコードスニペットを追加するために編集された質問。必要に応じて提供するよりも、他に何が関連するのかは本当に分かりません。 – demaniak

答えて

0

私の場合、理由は@Scheduled注釈のinitialDelayにありませんでした - アプリケーション開始時にメソッドが呼び出されました。

+0

悲しいことに、これは私の問題ではないようです - 'initialDelay'を設定しても役立たない。最終的にタスクが実行されると、タスクはまだ2回実行されています。 – demaniak

関連する問題