2012-05-21 15 views
7

Robiąc loadtesting na naszej aplikacji Zauważyłem, że jeśli używasz @Transactional i @Cacheable annotions że hibernacji zawsze tworzy transakcji bazy danych. Czy istnieje prosty sposób, aby temu zapobiec? Bardziej eleberate sposób rozwiązać ten problem w ciągu wiosny jest posiadanie następujących klas/interfejsówCombination hibernacja @Transactional & ehcache @Cacheable zawsze tworzy DB transakcję

  • Servicelayer interfejs
  • Cacheable adnotacją klasa, która jest po prostu proxy/przekaz
  • Transakcyjnej klasy adnotacja implentation

Co się dzieje, jest po

Połączenie 1:

  1. transakcja zostanie utworzony
  2. metoda klasy jest wywoływana
  3. wynik buforowane & powrócił

Połączenie 2:

  1. transakcja zostanie utworzony
  2. Kopia wynik zostanie zwrócony

preferowana wynik powinien być:

Połączenie 1:

  1. transakcja zostanie utworzony
  2. metody klasy jest wywoływana
  3. wynik buforowane & powrócił

połączenia 2:

  1. Cached wynik zostanie zwrócony
+0

nie jest hibernacji, który jest połączeniem, jest wiosna, że ​​robi to przed wywołaniem metody, które zostały oznaczone @Transactional –

Odpowiedz

9

Musisz zmienić względną kolejność @Transactional i @Cacheable aspektach.

Można skonfigurować za pomocą atrybutu : <tx:annotation-driven> i <cache:annotation-driven>. Zobacz 8.2.4.7 Advice ordering sensu wartości zamówienia.

Powiązane problemy