0
我有一些方法可以通过Spring数据JPA存储库导入机场价格并将其保存到数据库。Spring数据JPA等待发现
导入方法是这样的:
@Transactional
public Future<Boolean> importFuel(File serverFile, Long providerIdLong) {
final FuelProvider fuelProvider = fuelProviderRepository
.findOne(providerIdLong);
LOG.debug("fuelProvider:" + fuelProvider.getName());
List<AirportFuel> airportFuels = processors
.get(providerIdLong).process(serverFile, fuelProvider);
if(airportFuels==null){
return new AsyncResult<>(false);
}
airportFuelRepository.deleteByFpId(providerIdLong);
airportFuelRepository.save(airportFuels);
fuelProvider.setUpdated(new Date());
fuelProviderRepository.save(fuelProvider);
return new AsyncResult<>(true);
}
例如,这是阅读方法:
List<AirportFuel> airportFuels = airportFuelRepository.findByIata(airport.getIata());
和AirportFuelRepository:
@Repository
@Transactional(readOnly = true)
public interface AirportFuelRepository extends CrudRepository<AirportFuel,
Long> {
@Transactional
@Modifying
@Query("delete from AirportFuel af where af.fpId = :#{#fpId}")
void deleteByFpId(@Param("fpId") Long fpId);
@Transactional(readOnly = true)
List<AirportFuel> findByIata(String iata);
List<AirportFuel> findByIataAndFpId(String iata, Long fpId);
}
应用是基于Spring开机,休眠,春天数据JPA和MS SQL。
如果import方法正在运行,那么其他方法也使用airportFuelRepository等待这个方法的结束,我不知道为什么。我想这个阅读方法可以在导入之前处理数据,并且不会等待结束导入方法。
谢谢你的建议。
导入方法由JmsListener通过MQ调用,前人的精力是异步。但我试过你的建议,但没有结果。如果import方法在最后并提交数据,则read方法为block。我忘了补充说,它的处理数量是几千个。 –