Spring Boot ve MongoDB'ye bağlantı ayrıntıları nasıl yapılandırılır?


93

Spring Boot'ta yeni olduğum için MongoDB için bağlantı ayrıntılarını nasıl yapılandırabileceğimi merak ediyorum. Normal örnekleri denedim ama hiçbiri bağlantı detaylarını kapsamıyor.

Kullanılacak veritabanını ve MongoDB çalıştıran ana bilgisayarın url / portunu belirtmek istiyorum.

Herhangi bir ipucu veya püf noktası?

Yanıtlar:


108

Sadece Boot Docs'tan alıntı yapmak için :

spring.data.mongodb.uriURL'yi değiştirmek için özelliği ayarlayabilir veya alternatif olarak bir host/port. Örneğin, aşağıdakileri sizde beyan edebilirsiniz application.properties:

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

spring.data.mongodbÖnek için mevcut tüm seçenekler şu alanlardır 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;

Hey, Spring boot kullanan normal bir web uygulaması için aynısını yapar mıyım? Application.properties dosyasını nerede bulabilirim?
Theo

Varsayılan seçeneklere güvenmek istemiyorsanız, kendiniz yazmanız gerekir: docs.spring.io/spring-boot/docs/current/reference/html/…
Artem Bilan

Parola alanını bir karakter [] olarak ayarlamak istiyorsanız şu anda bir sorun olduğunu unutmayın. Bunun yerine uri alanını kullanın. Bu hata raporunun altına bakın: github.com/spring-projects/spring-boot/issues/536
grahamrb

Merhaba, Spring Boot'ta oldukça yeniyim. Bu konfigürasyonları nerede ayarlayacağız? Sadece argüman olarak iletmek veya bir yere koymak mı?
Siddharth

Lütfen konuyla ilgili Referans Kılavuzunu okuyun: docs.spring.io/spring-boot/docs/current/reference/html/…
Artem Bilan

34

spring.data.mongodb.hostve spring.data.mongodb.portkullandığınız takdirde desteklenmez Mongo 3,0 Java sürücüsü . Bu gibi durumlarda, aşağıdaki gibi spring.data.mongodb.uritüm konfigürasyonu sağlamak için kullanılmalıdır:

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

12
Ya bir kullanıcınız veya şifreniz yoksa?
Jesse

@Jesse bu durumda cezası, varsayılan olarak mongo herhangi bir kimlik doğrulaması gerektirmez, böylece bağlantı bu durumda çalışır.
jmojico

Spring.data.mongodb.uri'de otomatik bağlantı verme seçeneği var mı?
P Satish Patro

bağımsız yay veri uygulaması için çalışacak mı?
Sumanth Varada

22

Bir maven projesinde src/main/resources/application.ymlaşağıdaki içeriğe sahip bir dosya oluşturun :

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

Spring Boot, uygulamanızı yapılandırmak için otomatik olarak bu dosyayı kullanır. Ardından, ilkbahar önyükleme uygulamanızı entegrasyon profiliyle başlatabilirsiniz (ve yerel MongoDB'nizi kullanabilirsiniz)

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

veya üretim profiliyle (ve üretim MongoDB'nizi kullanın)

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

Spring.data.mongodb.uri'de otomatik bağlantı verme seçeneği var mı?
P Satish Patro

16

AbstractMongoConfiguration'ı genişleterek daha fazla ayrıntı tanımlayabilirsiniz.

@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;
    }
}

Kullanıcı adı ve şifre nerede belirtilir? Uygulamayı sadece aplikasyon.properties içinde tanımladığımızda ve ardından AbstractMongoConfiguration'ı genişlettiğimizde, yetkisiz ekskapsiyon verir.
Noor Syed

Application.properties içinde olacak
Mari Murotani

Bunu yapmak için profil değişkenini kullanmak doğru mu? if(profileActive=="dev"){ return new Fongo(getDatabaseName()).getMongo();} else { return new MongoClient(url, port); }
anat0lius

15

MongoDB'nin bağlandığınız veritabanından farklı olabilen " kimlik doğrulama veritabanı " kavramına sahip olduğuna dikkat etmek de önemlidir . Örneğin, Mongo için resmi Docker imajını kullanırsanız ve MONGO_INITDB_ROOT_USERNAME ve MONGO_INITDB_ROOT_PASSWORD ortam değişkenlerini belirtirseniz , muhtemelen kullanmak istediğiniz veritabanı olmayan ' admin ' veritabanında bir kullanıcı oluşturulur . Bu durumda, parametreleri aşağıdakileri kullanarak application.properties dosyanızda uygun şekilde belirtmelisiniz :

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
değil MONGO_INITDB_ROOT_USERNAMEama MONGO_INITDB_ROOT_PASSWORDa durumunda password.
Kamil Witkowski

0

İşte Spring Boot 2.0'da özel MongoClient ekleyerek Bağlantı için daha fazla kontrol sağlayarak bunu nasıl yapabilirsiniz?

Tam Kaynak Kodu için lütfen github Bağlantısını takip edin

@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;
    }} 

İşte nasıl? Ne - sınıf eklemek mi? JPA nedir? İthalatlarınız bu dosyada nerede? Bu en iyi ihtimalle eksik bir cevaptır.
barrypicker
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.