2017-12-20 3 views
3

Ich habe bis jetzt ein Repository-Objekt wie unten in einer Single-Thread-Anwendung verwendet.Repository-Klassenobjekt über mehrere Threads hinweg verwenden

@Service 
class MyEntityService { 
    @Autowired 
    private MyEntityRepository repository; 
} 

Das Repository sieht aus wie unten -

import com.myorg.mypackage.entities.facebook.MyEntity; 
import org.springframework.data.repository.CrudRepository; 
public interface MyEntityRepository extends CrudRepository<MyEntity, String> { 
    MyEntity findByFacebookPageId(String facebookPageId); 
} 

Ich plane mehrere Threads über Executor-Dienst zu starten und gleichzeitig auf die Datenbank schreiben. Muss ich mehrere Instanzen des Repositorys erstellen, oder wird ein einzelnes Repository ausgeführt?

+0

jede dieser Methoden aus einem Repository implizit mit 'Transactional' bezeichnet ist - eine separate Transaktion für jede Ihrer Anfragen aufgespannt wird - und das ist, was sollten Sie interessieren. zu mir (wenn das alles Code ist, den du zeigst) - du bist auf der sicheren Seite, * besonders * da alles, was du tust, hier gelesen wird – Eugene

+0

Sie sind threadsicher - aber du musst irgendwie mit Kontext umgehen. Im Idealfall binden Sie eine Verbindung/Sitzung an jeden Thread, so dass Sie nicht jedes Mal einen aus dem Pool überprüfen. Es gibt auch eine Frage dessen, was Sie mit den Transaktionen machen wollen - das Öffnen und Schließen jedes Methodenaufrufs wird ziemlich langsam sein - abhängig davon, was Sie tun, kann es Ihren Multithread-Code eher ... seriell machen. –

Antwort

1

Generell ist der Frühling jpa Thread sicher. Alles kommt von dem Entity Manager, der im Frühjahr von den Entity Manager Fabriken bezogen wird. Spring fügt in jedem Thread einen neuen Entitätsmanager ein, damit der Entity Manager threadsicher aussieht.

Kontrolle dieses schöne article

Verwandte Themen