स्प्रिंग बूट और MongoDB से कनेक्शन विवरण कैसे कॉन्फ़िगर करें?


89

स्प्रिंग बूट के लिए नया होने के नाते मैं सोच रहा हूं कि मैं MongoDB के लिए कनेक्शन विवरण कैसे कॉन्फ़िगर कर सकता हूं। मैंने सामान्य उदाहरणों की कोशिश की है लेकिन कोई भी कनेक्शन विवरण को कवर नहीं करता है।

मैं उस डेटाबेस को निर्दिष्ट करना चाहता हूं जो उपयोग होने जा रहा है और मोंगॉबीडी को चलाने वाले होस्ट का url / पोर्ट।

कोई संकेत या सुझाव?

जवाबों:


105

बस बूट डॉक्स को उद्धृत करने के लिए :

आप spring.data.mongodb.uriurl को बदलने के लिए संपत्ति सेट कर सकते हैं, या वैकल्पिक रूप से निर्दिष्ट कर सकते हैं a host/port। उदाहरण के लिए, आप अपने में निम्नलिखित की घोषणा कर सकते हैं application.properties:

spring.data.mongodb.host=mongoserver
spring.data.mongodb.port=27017

spring.data.mongodbउपसर्ग के सभी उपलब्ध विकल्प निम्नलिखित के क्षेत्र हैं MongoProperties:

private String host;

private int port = DBPort.PORT;

private String uri = "mongodb://localhost/test";

private String database;

private String gridFsDatabase;

private String username;

private char[] password;

अरे, क्या मैं स्प्रिंग बूट का उपयोग करके सामान्य वेबप के लिए भी ऐसा ही करूंगा? मुझे एप्लिकेशन कहां मिलेगा।
थियो

आपको इसे स्वयं लिखने की आवश्यकता है, यदि आप डिफ़ॉल्ट विकल्पों पर भरोसा नहीं करना चाहते हैं: docs.spring.io/spring-boot/docs/current/reference/html/…
Artem Bilan

ध्यान दें कि वर्तमान में एक समस्या है यदि आप पासवर्ड फ़ील्ड सेट करना चाहते हैं क्योंकि यह एक चार [] है। इसके बजाय यूरी फ़ील्ड का उपयोग करें। इस बग रिपोर्ट के नीचे देखें: github.com/spring-projects/spring-boot/issues/536
grahamrb

नमस्ते, मैं स्प्रिंग बूट के लिए बहुत नया हूँ। हम उन कॉन्फ़िगरेशनों को कहां सेट करते हैं? बस इसे तर्कों के रूप में पारित करें या इसे कहीं सेट करें?
सिद्धार्थ

कृपया, इस मामले पर संदर्भ पुस्तिका पढ़ें: docs.spring.io/spring-boot/docs/current/reference/html/…
आर्टेम बिलन

31

spring.data.mongodb.hostऔर spring.data.mongodb.portयदि आप Mongo 3.0 जावा ड्राइवर का उपयोग कर रहे हैं तो समर्थित नहीं हैं । ऐसे मामलों में, spring.data.mongodb.uriइस तरह के सभी कॉन्फ़िगरेशन प्रदान करने के लिए उपयोग किया जाना चाहिए:

spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345

12
यदि आपके पास उपयोगकर्ता या पासवर्ड नहीं है तो क्या होगा?
जेसी

@ उस मामले में अपने ठीक, डिफ़ॉल्ट mongo द्वारा किसी भी प्रमाणीकरण की आवश्यकता नहीं है, तो कनेक्शन उस मामले में काम करेगा।
जोमज़िको

क्या ऑटोडेक्टन को स्प्रिंग में देने का कोई विकल्प है ।.data.mongodb.uri?
पी सतीश पात्रो

यह स्टैंडअलोन स्प्रिंग डेटा एप्लिकेशन के लिए काम करता है?
सुमंत वरदा

20

मावेन परियोजना src/main/resources/application.ymlमें निम्नलिखित सामग्री के साथ एक फ़ाइल बनाएँ :

spring.profiles: integration
# use local or embedded mongodb at localhost:27017
---
spring.profiles: production
spring.data.mongodb.uri: mongodb://<user>:<passwd>@<host>:<port>/<dbname>

स्प्रिंग बूट स्वचालित रूप से आपके एप्लिकेशन को कॉन्फ़िगर करने के लिए इस फ़ाइल का उपयोग करेगा। तब आप अपने स्प्रिंग बूट एप्लिकेशन को एकीकरण प्रोफ़ाइल के साथ शुरू कर सकते हैं (और अपने स्थानीय MongoDB का उपयोग करें)

java -jar -Dspring.profiles.active=integration your-app.jar

या उत्पादन प्रोफ़ाइल के साथ (और अपने उत्पादन MongoDB का उपयोग करें)

java -jar -Dspring.profiles.active=production your-app.jar

क्या ऑटोडेक्टन को स्प्रिंग में देने का कोई विकल्प है ।.data.mongodb.uri?
पी सतीश पात्रो

16

आप AbstractMongoConfiguration का विस्तार करके अधिक विवरण परिभाषित कर सकते हैं।

@Configuration
@EnableMongoRepositories("demo.mongo.model")
public class SpringMongoConfig extends AbstractMongoConfiguration {
    @Value("${spring.profiles.active}")
    private String profileActive;

    @Value("${spring.application.name}")
    private String proAppName;

    @Value("${spring.data.mongodb.host}")
    private String mongoHost;

    @Value("${spring.data.mongodb.port}")
    private String mongoPort;

    @Value("${spring.data.mongodb.database}")
    private String mongoDB;

    @Override
    public MongoMappingContext mongoMappingContext()
        throws ClassNotFoundException {
        // TODO Auto-generated method stub
        return super.mongoMappingContext();
    }
    @Override
    @Bean
    public Mongo mongo() throws Exception {
        return new MongoClient(mongoHost + ":" + mongoPort);
    }
    @Override
    protected String getDatabaseName() {
        // TODO Auto-generated method stub
        return mongoDB;
    }
}

उपयोगकर्ता नाम और पासवर्ड कहाँ निर्दिष्ट किया गया है? यह अनधिकृत रूप से छूट देता है, जब हम बस एप्लीकेटन.प्रोपरेट्टी में इसे परिभाषित करते हैं और फिर AbstractMongoConfiguration का विस्तार करते हैं।
नूर सैयद

यह आवेदन के अंदर होगा। अनुभव
मारी मुरटानी

क्या ऐसा करने के लिए प्रोफ़ाइल चर का उपयोग करना सही है? if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
अनातलीस

13

यह नोट करना भी महत्वपूर्ण है कि MongoDB में " प्रमाणीकरण डेटाबेस " की अवधारणा है , जो आपके द्वारा कनेक्ट किए जा रहे डेटाबेस से भिन्न हो सकती है। उदाहरण के लिए, यदि आप मानगो के लिए आधिकारिक डॉकर छवि का उपयोग करते हैं और पर्यावरण चर MONGO_INITDB_ROOT_USERNAME और MONGO_INITDB_ROOT_PASSWORD निर्दिष्ट करते हैं , तो एक उपयोगकर्ता ' व्यवस्थापक ' डेटाबेस बनाया जाएगा , जो संभवतः वह डेटाबेस नहीं है जिसका आप उपयोग करना चाहते हैं। इस मामले में, आप अपने पर तदनुसार पैरामीटर निर्दिष्ट करना चाहिए application.properties का उपयोग कर फ़ाइल:

spring.data.mongodb.host=127.0.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.authentication-database=admin
spring.data.mongodb.username=<username specified on MONGO_INITDB_ROOT_USERNAME>
spring.data.mongodb.password=<password specified on MONGO_INITDB_ROOT_PASSWORD>
spring.data.mongodb.database=<the db you want to use>

1
यह नहीं है MONGO_INITDB_ROOT_USERNAMEलेकिन MONGO_INITDB_ROOT_PASSWORDएक के मामले में password
कामिल विटकोव्स्की

0

यहाँ है कि आप कस्टम बूटो को जोड़कर, कस्टम कनेक्शन के लिए अधिक नियंत्रण प्रदान करके स्प्रिंग बूट 2.0 में कैसे कर सकते हैं ,

कृपया पूर्ण स्रोत कोड के लिए github लिंक का पालन करें

@Configuration
@EnableMongoRepositories(basePackages = { "com.frugalis.repository" })
@ComponentScan(basePackages = { "com.frugalis.*" })
@PropertySource("classpath:application.properties")
public class MongoJPAConfig extends AbstractMongoConfiguration {

    @Value("${com.frugalis.mongo.database}")
    private String database;
    @Value("${com.frugalis.mongo.server}")
    private String host;
    @Value("${com.frugalis.mongo.port}")
    private String port;
    @Value("${com.frugalis.mongo.username}")
    private String username;
    @Value("${com.frugalis.mongo.password}")
    private String password;


    @Override
    protected String getDatabaseName() {
        return database;
    }

    @Override
    protected String getMappingBasePackage() {
        return "com.frugalis.entity.mongo";
    }

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

    @Override
    @Bean
    public MongoClient mongoClient() {

        List<MongoCredential> allCred = new ArrayList<MongoCredential>();
        System.out.println("???????????????????"+username+" "+database+" "+password+" "+host+" "+port);
        allCred.add(MongoCredential.createCredential(username, database, password.toCharArray()));
        MongoClient client = new MongoClient((new ServerAddress(host, Integer.parseInt(port))), allCred);
        client.setWriteConcern(WriteConcern.ACKNOWLEDGED);

        return client;
    }} 

ऐसे? क्या - एक वर्ग जोड़ना? जेपीए क्या है? इस फ़ाइल में आपके आयात कहाँ हैं? यह सबसे अच्छा एक अधूरा जवाब है।
बैरीपिकर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.