2014-09-09 4 views
10

मैं नीचे दिए गए कोड में सीआरयूडी संचालन करने के लिए मोंगो रिपोजिटरी का उपयोग कर रहा हूं। यद्यपि यह कोड काम करता है, लेकिन दस्तावेजों और संग्रहों को एक अलग डीबी में बनाया गया है जो मैं चाहता हूं। मैं स्पष्ट रूप से एक डीबी नाम कैसे निर्दिष्ट कर सकता हूं कि कौन से दस्तावेज़ संग्रहीत किए जाएंगे।वसंत डेटा में डेटाबेस नाम निर्दिष्ट करने के लिए कैसे करें mongoDB

POJO वर्ग:

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

भंडार:

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

सेवा भंडार का उपयोग करता है:

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

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

और मैं एक बाकी नियंत्रक वर्ग से सेवा का उपयोग:

@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(); 

    } 

... 
} 

मैंने इस वसंत mongoDB कॉन्फ़िगरेशन क्लास को बनाया है जिसमें डीबी नाम सेट करने का विकल्प है, लेकिन यह पता नहीं लगा सकता कि उपरोक्त भंडारों के साथ इसका उपयोग कैसे किया जाए।

@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

क्या आपको अपना उत्तर मिला है? इस ट्यूटोरियल का पालन करने के बाद एक ही समस्या के साथ अटक गया: https://spring.io/guides/gs/accessing-mongodb-data-rest/ – Mussa

+0

दुर्भाग्य से, नहीं। – Sami

उत्तर

1

आपकी कॉन्फ़िगरेशन ठीक है सैम। क्या आप वाकई "माईडीबी" नामक डीबी है? या आप सुनिश्चित हैं कि आप डीबी नाम को कहीं और (जैसे ऐप संदर्भ xml) को नीचे भी सेट नहीं करते हैं।

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

हां डीबी है और मैं किसी अन्य कॉन्फ़िगरेशन का उपयोग नहीं करता हूं, हालांकि आपके प्रश्न ने मुझे एहसास दिलाया कि यह ग्रिडएफएसस्टोर है इसलिए इसमें केवल दो संग्रह हैं (भाग और फ़ाइलें)। सुनिश्चित नहीं है कि अन्य संग्रहों के लिए इसका उपयोग करना संभव है? – Sami

+0

डीबी को दूसरे में बदलना (ग्रिडएफ नहीं) भी काम नहीं करता था। यहां तक ​​कि यदि मैं डीबी छोड़ देता हूं, तो यह एक नया डीबी बनाता है जिसे परीक्षण कहा जाता है और वहां दस्तावेज़ों को स्टोर किया जाता है। – Sami

+0

यदि आप सुनिश्चित हैं कि आपके प्रोजेक्ट में कोई टेस्ट डीबी संदर्भ नहीं है, तो हो सकता है कि आप एक और स्प्रिंग मोन्गो कॉन्फ़िगरेशन आज़माएं जो आपको गुगलिंग द्वारा मिलेगा। क्षमा करें मैं आगे मदद नहीं कर सका –

2

Fwiw, मैं Sezin कर्ली और इसके बाद के संस्करण सैम कोड के संयोजन का उपयोग कर मोंगो डेटाबेस नाम बदलने के लिए सक्षम हूँ, सैम स्थिति में काम नहीं कर समाधान के बावजूद।

मेरे पोम फ़ाइल MongoDB के लिए केवल इस संदर्भ में शामिल हैं:

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

विशेष रूप से, पहले मैं निम्नलिखित जानकारी के साथ संसाधनों में beans.xml फ़ाइल बनाई:

<?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> 

इसके बाद, मैं बदल मेरी कॉन्फ़िगरेशन लोड करने के लिए मुख्य:

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

नोट: यह निष्पादित होना चाहिए मुख्य में मुख्य()।

अन्त में, मैं अपने शुरू वर्ग के लिए extends AbstractMongoConfiguration जोड़ा गया है और कार्यान्वित

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

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

डेटाबेस नाम दो स्थानों में निर्दिष्ट किया गया था। दुर्भाग्य से, यह सफलता के लिए आवश्यक प्रतीत होता है। spring.data.mongodb.database = yourdb

है कि आप के लिए बहुत देर हो चुकी मेरे लिए काम किया है, शायद, लेकिन यह कोई एक ही समस्या की तलाश में मदद कर सकता है:

14

application.properties करने के लिए एक पंक्ति जोड़ें। और गुण देखें here!

संबंधित मुद्दे