MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Woher weiß Spring Data, mit welchem ​​​​Speicher ein Repository gesichert werden soll, wenn mehrere Module verwendet werden?

Die Entscheidung, welcher Proxy für eine Spring Data-Repository-Schnittstelle erstellt wurde, wird nur aufgrund Ihrer Konfigurationseinstellungen getroffen. Angenommen, Sie haben die folgende Konfiguration:

@Configuration
@EnableJpaRepositories("com.acme.foo")
@EnableMongoRepositories("com.acme.foo")
class Config { }

Das wird irgendwann explodieren wie die Interfaces im Paket com.acme.foo werden beide von der MongoDB- und JPA-Infrastruktur erkannt. Um dies zu beheben, erlaubt Ihnen sowohl die JavaConfig- als auch die XML-Unterstützung, Einschluss- und Ausschlussfilter zu definieren, sodass Sie entweder Namenskonventionen, zusätzliche Anmerkungen oder ähnliches verwenden können:

@Configuration
@EnableJpaRepositories(basePackages = "com.acme.foo", 
                       includeFilters = @Filter(JpaRepo.class))
@EnableMongoRepositories(base Packages = "com.acme.foo", 
                         includeFilters = @Filter(MongoRepo.class))
class Config { }

In diesem Fall die beiden Annotationen @JpaRepo und @MongoRepo (von Ihnen zu erstellen) verwendet werden, um die Erkennung selektiv auszulösen, indem die relevanten Repository-Schnittstellen mit ihnen kommentiert werden.

Eine wirkliche automatische Erkennung ist so gut wie unmöglich, da es schwierig ist, allein anhand der Deklaration der Repository-Schnittstelle zu sagen, auf welchen Store Sie abzielen, und zu dem Zeitpunkt, an dem die Bean-Definitionen erstellt werden, wissen wir nicht einmal über eine weitere Infrastruktur (eine EntityManager o.ä.) noch.