2017-04-17 5 views
0

すべて、スタンドアロン環境下でSpringブートリポジトリをインスタンス化する方法は?

私のプロジェクトでは春のブートを使用しています。それは素晴らしいです。 私のプロジェクトには、定期的に(タイマー付きで)データベース上で動作し、http要求に応答しないプロジェクトがあります。 定期的にセンサー(多くのセンサー)に照会し、温度の読み取り値を収集し、読み取り値をデータベースに保管します。 データベースに格納する前に、読み取り値を警告しきい値と比較して、警告を生成するかどうかをテストします。

しきい値番号は、データベースからも照会(複雑)されます。 私は、このクエリのJPAResositoryを拡張するThresholdRepositoryを持っているので、このシナリオでそれを使いたいと思います。

質問:@Autowireを使用してスプリングブートでThresholdRepositoryインスタンスを生成できますか?そうでなければ、このタイマースレッドでThresholdRepositoryをインスタンス化する方法は?

私はでいくつかのコードを見つける:残念ながらhttp://www.yjs001.cn/java/spring/33161827667841434606.html

、コードが古くなっているとRepositoryMetadataにはgetDomainClassを持っていないと私は使用すべき代替分かりません。 誰か助けてください。

お勧めできます。

public interface ThresholdInfoRepository extends JpaRepository<ThresholdInfo, Long> { ThresholdInfo findOneByGatewayIdAndNodeAddrAndChannel(Long gatewayId, Byte nodeAddr, Byte channel); List<ThresholdInfo> findByGatewayId(Long gatewayId); } それは短いですが、多くの作業を行います。

私が言及したリポジトリは、以下の通りです。

答えて

2

はい、あなたは、

あなたは豆になるためにあなたのリポジトリの@EnableJpaRepositoriesに持つことができます。

次に、autowireを実行できるようにするには、TimerTaskもSpring Beanである必要があります。あなたのスケジュール設定方法を実行するためのタイマースレッドを開始します春-タスクhttps://spring.io/guides/gs/scheduling-tasks/

@SpringBootApplication 
@EnableScheduling 
@EnableJpaRepositories 
public class Application { 

    public static void main(String[] args) throws Exception { 
     SpringApplication.run(Application.class); 
    } 
} 

@Component 
public class UpdateTask { 
    @Autowired 
    ThresholdInfoRepository thresholdInfoRepository; 

    @Scheduled(fixedRate = ...) 
    public void updateSensor() { 
     thresholdInfoRepository.find(...) 
     readoutRepository.save(...); 
    } 
} 

春のブートを使用することができます。

+0

ありがとうございます。これはちょうど私が知る必要があったものです。 – DeanSinaean

関連する問題