2014-09-09 8 views
10

Ich verwende Mongo-Repositories, um CRUD-Operationen wie im folgenden Code auszuführen. Obwohl dieser Code funktioniert, aber die Dokumente und Sammlungen werden in einer anderen Datenbank erstellt als die, die ich möchte. Wie kann ich explizit einen DB-Namen angeben, in dem Dokumente gespeichert werden?Wie man den Datenbanknamen im Frühjahr angibt mongoDB

Die POJO Klasse:

@Document(collection = "actors") 
public class Actor 
{ 
    @Id 
    private String id; 
    ... 
    //constructor 
    //setters & getters 
} 

Das Repository:

public interface ActorRepository extends MongoRepository<Actor, String> 
{ 
    public Actor findByFNameAndLName(String fName, String lName); 
    public Actor findByFName (String fName); 
    public Actor findByLName(String lName); 
} 

Der Dienst, der das Repository verwendet:

@Service 
public class ActorService 
{ 
    @Autowired 
    private ActorRepository actorRepository; 

    public Actor insert(Actor a) 
    { 
    a.setId(null); 
    return actorRepository.save(a); 
    } 
} 

Und ich Zugriff auf den Dienst von einer REST-Controller-Klasse:

@RestController 
public class Controllers 
{ 

    private static final Logger logger = Logger.getLogger(Controllers.class); 
    private static final ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringMongoConfig.class); 

    @Autowire 
    private ActorService actorService; 

    @RequestMapping(value="/createActor", method=RequestMethod.POST) 
    public @ResponseBody String createActor(@RequestParam(value = "fName") String fName, 
     @RequestParam(value = "lName") String lName, 
     @RequestParam(value = "role") String role) 
    { 
    return actorService.insert(new Actor(null,fName,lName,role)).toString(); 

    } 

... 
} 

Ich habe diese Frühjahr mongoDB-Konfigurationsklasse erstellt, die die Möglichkeit hat, DB-Namen zu setzen, aber konnte nicht herausfinden, wie man es mit den oben genannten Repositories verwendet.

@Configuration 
public class SpringMongoConfig extends AbstractMongoConfiguration 
{ 
    @Bean 
    public GridFsTemplate gridFsTemplate() throws Exception 
    { 
     return new GridFsTemplate(mongoDbFactory(), mappingMongoConverter()); 
    } 

    @Override 
    protected String getDatabaseName() 
    { 
     return "MyDB"; 
    } 

    @Override 
    @Bean 
    public Mongo mongo() throws Exception 
    { 
     return new MongoClient("localhost" , 27017); 
    } 

    public @Bean MongoTemplate mongoTemplate() throws Exception 
    { 
     return new MongoTemplate(mongo(), getDatabaseName()); 
    }  
} 
+0

Haben Sie Ihre Antwort gefunden? Hat nach dem folgenden Tutorial mit demselben Problem festgestanden: https://spring.io/guides/gs/accessing-mongodb-data-rest/ – Mussa

+0

Leider nein. – Sami

Antwort

1

Ihre Konfiguration scheint in Ordnung Sam. Sind Sie sicher, dass es eine Datenbank namens "MyDB" gibt? Oder sind Sie sicher, dass Sie den Datenbanknamen nicht auch an einer anderen Stelle (z. B. App-Kontext-XML) wie unten angegeben setzen.

<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
    <constructor-arg name="mongo" ref="mongo"/> 
    <constructor-arg name="databaseName" value="demo"/> 
    </bean> 
+0

ja es gibt DB und ich verwende keine anderen Konfigurationen, aber Ihre Frage hat mir klar gemacht, dass es GridFsStore ist, so dass es nur zwei Sammlungen (Chunks und Dateien) hat. Nicht sicher, ob es möglich ist, es auch für andere Sammlungen zu verwenden? – Sami

+0

Das Ändern des DB zu einem anderen (nicht GridFs) funktionierte nicht auch. Auch wenn ich die DB fallen lasse, erstellt sie eine neue DB namens Test und speichert die Dokumente dort. – Sami

+0

Wenn Sie sicher sind, dass es in Ihrem Projekt keine Test-Datenbankreferenz gibt, können Sie vielleicht eine andere Spring-Mongo-Konfiguration ausprobieren, die Sie beim Googlen finden. Entschuldigung, ich konnte nicht weiter helfen –

2

FWIW, ich bin in der Lage, den Mongo Datenbank-Namen unter Verwendung der Kombination von Sezin Karli und Sams Code oben trotz der Lösung funktioniert nicht in Sams Situation zu ändern.

Meine POM-Datei enthält nur diesen Hinweis auf MongoDB:

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-mongodb</artifactId> 
    </dependency> 

Insbesondere wird zunächst eine beans.xml Datei in Ressourcen mit den folgenden Informationen I erstellt:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:mongo="http://www.springframework.org/schema/data/mongo" 
     xsi:schemaLocation="http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd 
     http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 

    <mongo:mongo-client credentials="user:[email protected]" /> 

    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> 
     <constructor-arg name="mongo" ref="mongo"/> 
     <constructor-arg name="databaseName" value="myDBName"/> 
    </bean> 
</beans> 

Als nächstes änderte ich meine Main zum Laden der Konfiguration über:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); 

Hinweis: Dies muss ausgeführt werden zuerst in main().

Schließlich habe ich extends AbstractMongoConfiguration meiner Start-Klasse und implementiert

@Override 
    public String getDatabaseName() { 
     return "myDBName"; 
    } 

    @Override 
    @Bean 
    public Mongo mongo() throws Exception { 
     return new MongoClient("localhost" , 27017); 
    } 

Der Name der Datenbank in zwei Standorten angegeben wurde. Leider scheint dies für den Erfolg notwendig zu sein.

14

den application.properties Fügen Sie eine Zeile: spring.data.mongodb.database = ihredb

die für mich gearbeitet, für Sie vielleicht zu spät, aber das jemand helfen könnte für das gleiche Problem suchen. sehen Sie mehr Eigenschaften here!

Verwandte Themen