Mysql
 sql >> Database >  >> RDS >> Mysql

Come configurare Spring Boot per lavorare con due database?

*Le raccolte di ToMany sono pigre per impostazione predefinita in Hibernate e JPA. L'errore è dovuto al fatto che Jackson sta tentando di serializzare OneToMany quando viene chiuso il gestore entità (ovvero la sessione in modalità ibernazione). Pertanto, le raccolte pigre non possono essere recuperate.

Spring Boot con JPA per impostazione predefinita fornisce un OpenEntityManagerInViewFilter per il primario EM. Ciò consente l'accesso al DB di sola lettura, ma, per impostazione predefinita, funziona solo per l'EM primario.

Hai 3 opzioni:

1) È possibile aggiungere un recupero di partecipazione, ad es. Come funziona FetchMode in Spring Data JPA

2) Puoi aggiungere un OpenEntityManagerInViewFilter per il gestore di entità non primario e aggiungerlo al tuo contesto.

Tieni presente che ciò implica una sfida, per ogni istanza di Bar e Foo, la tua app tornerà al database per recuperare OneToMany. Questa è la parte che non funziona per Bar, ma è per Foo. Ciò implica un problema di scalabilità (chiamato problema N + 1 da alcuni) poiché per ogni foo e bar, esegui una query aggiuntiva, che diventerà lenta per quantità non banali di Foos e Bars.

3) Un'alternativa è rendere desiderosa la tua raccolta su Bar e Foo (vedi questo https://docs.oracle.com/javaee/7/api/javax/persistence/OneToMany.html#fetch-- ), ma questo deve essere analizzato attentamente se la scalabilità è un problema per te.

Consiglierei l'opzione n. 1.