2017-06-13 4 views
0

Ich habe eine Methode, die Preise für Flughäfen importieren und speichern Sie es in der Datenbank über Spring-Daten JPA-Repositories.Spring Daten JPA warten finden

Import Methode ist folgende:

@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); 
} 

Zum Beispiel dieser gelesen wird Methode:

List<AirportFuel> airportFuels = airportFuelRepository.findByIata(airport.getIata()); 

und 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); 

} 

Anwendung auf Frühling Boot basiert, Hibernate, Spring Daten JPA und MS SQL.

Wenn import-Methode läuft dann andere Methode, die auch airportFuelRepository auf Ende dieser Methode warten und ich weiß nicht warum. Ich nehme an, dass die Lesemethode mit den Daten vor dem Import funktioniert und nicht darauf wartet, die Importmethode zu beenden.

Vielen Dank für den Rat.

Antwort

0

Wenn ich richtig verstehe, möchten Sie, dass beide Methoden asynchron auf dasselbe Repository zugreifen können.

Um dies zu tun, kommentieren Sie Ihre Methode mit der @Async Annotation.

Ein paar Links, die Sie erhalten begonnen:

+0

Import-Methode wird von JmsListener durch MQ genannt, sould es async sein. Aber ich habe deinen Rat versucht, aber ohne Ergebnis. Die read-Methode blockiert, wenn die Importmethode am Ende ist und Daten festschreibt. Ich habe vergessen, die Anzahl der Entitäten hinzuzufügen, mit denen es in der Größenordnung von Tausenden behandelt wird. –

Verwandte Themen