Das Problem besteht darin, dass Sie mehrere Datenbankanforderungen (wie das Erstellen einer Sammlung) aus verschiedenen Threads ausführen. ArangoDB weiß nichts über Ihre Client-Threads. Sie sind nur andere Clients für die Datenbank. Die Datenbanktransaktion wird Ihnen nicht helfen. Sie würden immer noch Ausnahmen bekommen.
Der einfachste Weg, um Ihr Problem zu vermeiden, ist die Verwendung einer synchronized
Methode in Ihren Threads zum Erstellen der Sammlung. In dieser Methode prüfen Sie, ob die Sammlung bereits existiert, bevor Sie sie erstellen.
Synchronisierte Methoden können jeweils nur in einem Thread ausgeführt werden. Andere Threads, die es aufrufen, werden blockiert. Der erste Thread, der Ihre Methode aufruft, erstellt die Sammlung, die folgenden Threads werden nicht versuchen, sie zu erstellen.
public synchronized void createCollection(ArangoDatabase database, String collection) {
if (!database.getCollections().stream().map(c -> c.getName()).anyMatch(c -> c.equals(collection)) {
database.createCollection(collection);
}
}