web-dev-qa-db-ja.com

スケジューラがSpring Bootで実行されていません

Spring Bootアプリケーションを作成しました。スケジューラメソッドstartService()を含むクラスを構成しました。以下は私のコードです:

サービスクラス:

_package com.mk.service;  
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import com.mk.envers.model.BossExtChange;
import com.mk.envers.model.BossExtChangeRepository;

@Component
public class EnverseDemoService {

    @Autowired
    BossExtChangeRepository bossExtChangeRepository;

    @Scheduled(fixedRate = 30000)
    public void startService() {
        System.out.println("Calling startService()");
        BossExtChange bossExtChange = bossExtChangeRepository.findById(5256868L);
        System.out.println("bossExtChange.getDescription()--->"+bossExtChange.getDescription());
        System.out.println("Ending startService()");
    }
}
_

メインクラス:

_import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.PropertySource;
import org.springframework.scheduling.annotation.EnableScheduling;

@SpringBootApplication
@EnableScheduling
@PropertySource("classpath:application.properties")
public class EnverseDemoApplication {

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

私はクラスに_@Component_と注釈を付け、またスケジューラとして実行される@Scheduled(fixedRate = 30000)とメソッドに注釈を付けました。ただし、アプリケーションをSpring Bootとして実行している間は、スケジューラーはトリガーされません。コンソールに次のメッセージが表示されます。

_2016-02-03 10:56:47.708  INFO 10136 --- [           main] o.s.j.e.a.AnnotationMBeanExporter        : Registering beans for JMX exposure on startup 
2016-02-03 10:56:47.721  INFO 10136 --- [           main] com.mk.envers.EnverseDemoApplication     : Started EnverseDemoApplication in 3.231 seconds (JVM running for 3.623)
2016-02-03 10:56:47.721  INFO 10136 --- [       Thread-2] s.c.a.AnnotationConfigApplicationContext : Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@49e202ad: startup date [Wed Feb 03 10:56:44 IST 2016]; root of context hierarchy
2016-02-03 10:56:47.721  INFO 10136 --- [       Thread-2] o.s.j.e.a.AnnotationMBeanExporter        : Unregistering JMX-exposed beans on shutdown 
2016-02-03 10:56:47.736  INFO 10136 --- [       Thread-2] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
_

誰か私を助けてください。

14
Mohith Kumar

私はようやく上記の問題を解決することができました。サービスクラスのパッケージEnverseDemoServicepackage com.mk.service;からcom.mk.envers.service;に変更しました。これは、メインの構成クラスEnverseDemoApplicationがパッケージcom.mk.enversに存在するためです。ブートアプリケーションの他のすべてのクラスは、対象パッケージに含まれている必要があります。 Eg: com.mk.envers.*;

9
Mohith Kumar

@ ComponentScanアノテーションを設定ファイルに追加することでこの問題を解決できるかもしれません

@SpringBootApplication
@EnableScheduling
@ComponentScan(basePackages = "com.mk.service")
@PropertySource("classpath:application.properties")
public class EnverseDemoApplication {

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

アプリクラスに@EnableSchedulingアノテーションを追加するのを忘れたことに違いありません。

public static void main(String[] args) {
        context = SpringApplication.run(YouApplication.class, args);
    }
5
Pravin