2017-04-17 46 views
0

全部,如何在獨立環境下實例化Spring引導存儲庫?

我在我的項目中使用了spring boot。太好了。 我的項目有一部分是定期對數據庫進行操作(使用定時器),而不是響應http請求。 它定期查詢傳感器(很多傳感器)並收集溫度讀數,並將讀數存儲到數據庫中。 在將其存儲到數據庫之前,將讀數與警告閾值進行比較以測試是否應生成警告。

閾值數量也將從數據庫中查詢(複雜)。 我有一個ThresholdRepository爲此查詢擴展JPAResository,所以我想在這種情況下使用它。

我的問題是:我可以使用@Autowire爲Spring啓動生成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你的資料庫,成爲一個bean。

然後,爲了能夠自動裝載它,你的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(...); 
    } 
} 

Spring引導將啓動一個計時器線程來執行您的計劃方法。

+0

非常感謝。這正是我需要知道的。 – DeanSinaean