In Spring-Anwendungen (die die deklarative Transaktionsverwaltung von Spring verwenden) wird bei der Verwendung von JPA/Hibernate eine Hibernate-Sitzung erstellt und eine Datenbankverbindung von einer Datenquelle abgerufen, um diese erste Transaktion auszuführen . Jede nachfolgende Transaktion in der Anfrage wird die Sitzung und die Verbindung wiederverwenden. Gibt es eine Möglichkeit, Hibernate (oder das Transaktionsverwaltungssystem von Spring) dazu zu zwingen, eine neue Verbindung von der Datenquelle für die nachfolgende Transaktion zu erhalten?Gibt es eine Möglichkeit, Hibernate zu zwingen, neue Verbindung für nächste Transaktion innerhalb einer Spring-Anwendung zu verwenden?
Hintergrundinformationen und was ich versuche zu erreichen
Ich bin eine benutzerdefinierte Implementierung von AbstractRoutingDatasource zu routen Datenbankanfragen zwischen einem Master und einem Slave repliziert mit (read-only) Datenbank. Ich habe eine benutzerdefinierte Annotation mit Datenquellenroutinginformationen und AOP Aspect erstellt, die die mit meinen benutzerdefinierten Annotations annotierten Methoden abfängt, um ein Framework zu erstellen, in dem zusätzlich zu @Transactional eine zusätzliche Datenquellenrouting-Annotation hinzugefügt werden kann, um eine Datenquelle (Master oder Slave) auszuwählen), auf dem die Transaktion ausgeführt werden soll. Aspect informiert die Routing-Datenquelle darüber, dass die nächste Verbindung, die im aktuellen Thread angefordert wurde, vor dem Start der Transaktion an eine bestimmte Datenquelle (wie in der Anmerkung definiert) gesendet werden soll. Das Problem ist, dass dies nur bei der ersten Transaktion funktioniert, weil Hibernate die Verbindung zwischenspeichert und keine neue für die nächste Transaktion anfordert.