Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie konfiguriere ich Spring Boot für die Arbeit mit zwei Datenbanken?

*ToMany-Sammlungen sind in Hibernate und JPA standardmäßig faul. Der Fehler liegt daran, dass Jackson versucht, OneToMany zu serialisieren, wenn der Entitätsmanager (auch bekannt als Sitzung in der Hibernate-Sprache) geschlossen ist. Daher können faule Sammlungen nicht abgerufen werden.

Spring Boot mit JPA stellt standardmäßig einen OpenEntityManagerInViewFilter bereit für die primäre EM. Dies ermöglicht einen schreibgeschützten DB-Zugriff, funktioniert aber standardmäßig nur für das primäre EM.

Sie haben 3 Möglichkeiten:

1) Sie können einen Join-Fetch hinzufügen, z. Wie funktioniert der FetchMode in Spring Data JPA

2) Sie können einen OpenEntityManagerInViewFilter für den nicht primären Entitätsmanager hinzufügen und ihn Ihrem Kontext hinzufügen.

Bitte beachten Sie, dass dies eine Herausforderung bedeutet, dass Ihre App für jede Bar- und Foo-Instanz zur Datenbank zurückkehrt, um OneToMany abzurufen. Das ist der Teil, der nicht für Bar funktioniert, sondern für Foo. Dies impliziert ein Skalierbarkeitsproblem (von einigen als N + 1-Problem bezeichnet), da Sie für jedes Foo und jeden Balken eine zusätzliche Abfrage ausführen, die bei nicht trivialen Mengen von Foos und Balken langsam wird.

3) Eine Alternative besteht darin, Ihre Sammlung auf Bar and Foo eifrig zu machen (siehe diesen https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ), aber dies muss sorgfältig analysiert werden, wenn Skalierbarkeit überhaupt ein Problem für Sie ist.

Ich würde Option 1 empfehlen.