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?
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
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. –