2017-11-20 9 views
0

@Componenet、@ Configuration、@ Beanアノテーションの適切な使い方を理解できませんでした。 60秒ごとに1つのメソッドを実行したいと思います。以下のコードを確認してください。 @Componentアノテーションを与えないと、それは実行されません。この文脈で@Componentの使用は何ですか?春の起動時にタスクをスケジュールする必要があるときに@Componentを追加する必要があるのはなぜですか?

@EnableScheduling 
    public class SchedulingProjectApplication { 

    private static final Logger log = 
    LoggerFactory.getLogger(SchedulingProjectApplication.class); 

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

    @Scheduled(fixedDelay = 6000) 
    public void r() 
    { 
     log.info("Start- main-job"); 
     log.info("stop-main-job"); 
    } 

    } 
+0

これは起動時にこのファイルをスキャンするようにspringに指示するためのものです。春の注釈がある場合にのみ、Springはそのファイルをスキャンします。そして、それがスキャンするときだけスケジューラが設定されており、スケジューリングは – pvpkiran

答えて

0

コードのこの作品にはいくつかの問題があります。

  1. あなたの春のブートアプリケーションは@SpringBootApplication(または@EnableAutoConfiguration)でフラグが付けられていませんが。その結果、自動設定はまったく実行されません(Spring Bootはあなたのアプリケーションを起動しますが、env準備などの基本的なこと以外は何もしません)。特定のケースでは完全に問題ありませんが、それはおそらくあなたが望むものではありません。
  2. あなたのアプリで直接実行タスクにフラグを立てました。これは、デモのためにOKですが、だからあなたの質問に答えるために、独自のクラス

でそのロジックを移動する方が良いでしょう:SchedulingProjectApplicationアプリのルート源であるが、それは単純なPOJOです。コンテナに処理を指示するものは何もありません。通常、アプリがある@Configuration(あなたがあなたのクラスに@SpringBootApplicationを追加した場合、それはあなたのアプリケーションの同じパッケージ内の任意の@Componentをスキャンします

あなたはなど、追加の豆を定義することができ、その上に@EnableXYZのいずれかを使用することができます( 。そして、すべてのサブパッケージ)コード構造について

詳細in the documentation

一つはあなたのための基本的な/シンプルな構造は次のようになります。

package com.example.foo; 

@SpringBootApplication 
@EnableScheduling 
public class SchedulingProjectApplication { 

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

} 

そして

package com.example.foo; 

@Component 
public class SchedulingLogger { 

    private static final Logger log = 
      LoggerFactory.getLogger(SchedulingLogger.class); 

    @Scheduled(fixedDelay = 6000) 
    public void r() 
    { 
     log.info("Start- main-job"); 
     log.info("stop-main-job"); 
    } 
} 

あなたが(例えばmoving decisions outside of your @SpringBootApplication if you use slicingなど)の設定に関してと認識しておく必要があり、他のものがあります。

+0

私のメインクラスは異なっていると読むことができます。私は@springBootApplicationをメインクラスに注釈を付けました。 – user3432036

+0

なぜ実際に使用しているコードで質問するのですか? –

関連する問題