Spring Data MongoDB-Repository mit benutzerdefinierten Namen für die Sammlung ein
Bin ich mit Spring-Data für MongoDB und ich muss in der Lage sein zu konfigurieren Sammlung zur Laufzeit.
Mein repository ist wie folgt definiert:
@Repository
public interface EventDataRepository extends MongoRepository<EventData, String> {
}
Habe ich versucht, dieses dummes Beispiel:
@Document(collection = "${mongo.event.collection}")
public class EventData implements Serializable {
aber mongo.event.Sammlung nicht auflösen, um einen Namen wie mit einem @Value-annotation.
Ein bisschen mehr Debuggen und zu suchen, und ich habe versucht, die folgenden:
@Document(collection = "#{${mongo.event.Sammlung}}")
Dies ergab eine Ausnahme:
Caused by: org.springframework.expression.spel.SpelParseException: EL1041E:(pos 1): After parsing a valid expression, there is still more data in the expression: 'lcurly({)'
at org.springframework.expression.spel.standard.InternalSpelExpressionParser.doParseExpression(InternalSpelExpressionParser.java:129)
at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:60)
at org.springframework.expression.spel.standard.SpelExpressionParser.doParseExpression(SpelExpressionParser.java:32)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseExpressions(TemplateAwareExpressionParser.java:154)
at org.springframework.expression.common.TemplateAwareExpressionParser.parseTemplate(TemplateAwareExpressionParser.java:85)
Vielleicht habe ich einfach nicht wissen, wie Sie zu Recht verwenden SPel Zugriff auf die Werte vom Frühjahr Eigentum Configurer.
Beim Durchlaufen des Codes sehe ich, dass es einen Weg gibt, um anzugeben, Sammlung namens oder sogar Ausdrücke, aber ich bin mir nicht sicher, dass die annotation sollte für diesen Zweck verwendet werden oder wie es zu tun.
Dank.
-AP_
- Vielleicht ist das dein problem? jira.Frühling.io/browse/DATAMONGO-1043
...
welche version von spring-data-mongodb verwenden Sie? - Es könnte sein (ich bin mit 1.7.0-RELEASE), aber das Problem, das Sie erwähnt befasst sich mit Ausdrücke in Abfragen zwischen mehrere Aufrufe. Aber du hast Ahnung, mir hat es ein richtigen SPEL-Ausdruck, also änderte ich es. Siehe aktualisierte Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
So, am Ende, hier ist eine Arbeit um, die hat den trick. Ich denke, ich weiß wirklich nicht, wie Zugriff auf die Daten von Feder-Eigenschaften Configurer Verwendung der SPeL-Ausdrücke.
In meinem @Configuration-Klasse:
Auf meinem Dokument:
Dieser, scheint zu funktionieren und richtig abholen der name konfiguriert in my .properties-Datei, aber ich bin mir noch nicht sicher, warum konnte ich nicht einfach auf den Wert zugreifen mit $ wie ich im @Value-annotation.
@Document
Können Sie dieses problem lösen, indem Sie einfach mit SPeL:
Update Frühjahr 5.x:
Seit Dem Frühjahr 5.x oder so benötigen Sie eine zusätzliche @ vor Umgebung:
definieren Sie Ihre entity-Klasse, wie
Definieren Sie ein benutzerdefiniertes repository-Schnittstelle mit getter-und setter-Methoden für die "collectionName"
Implementierung Klasse für die benutzerdefinierte repository mit "collectionName" Umsetzung
Hinzufügen
EventDataRepositoryImpl
auf die extends-Liste von repository-Schnittstelle in diesem würde es Aussehen wieNun in Ihre Klasse, wo Sie mit der
MongoRepository
legen Sie den Namen der Kollektion, würde es Aussehen wieEntity-Klasse
Configuration-Klasse