所有
我在我的项目中使用spring boot。太棒了。 我的项目有一部分定期(使用计时器)在数据库上运行,而不是响应http请求。 它定期查询传感器(许多传感器)并收集温度读数,并将读数存储到数据库中。 在将其存储到数据库之前,将读出的数字与警告阈值进行比较,以测试是否应生成警告。
阈值编号也要从数据库中查询(复杂)。 我有一个ThresholdRepository为这个查询扩展了JPAResository,所以我想在这个场景中使用它。
我的问题是:我可以使用@Autowire让spring boot为我生成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);
}
这很简短,但做了很多工作。
答案 0 :(得分:2)
是的,你可以,
您必须将@EnableJpaRepositories作为存储库才能成为bean。
然后,为了能够自动装配它,你的TimerTask也必须是一个Spring Bean。你可以使用spring-tasks 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启动会启动一个计时器线程来执行你的预定方法。