Spring Boot and how to configure connection details to MongoDB?

后端 未结 6 2031
死守一世寂寞
死守一世寂寞 2020-12-12 18:45

Being new to Spring Boot I am wondering on how I can configure connection details for MongoDB. I have tried the normal examples but none covers the connection details.

相关标签:
6条回答
  • 2020-12-12 19:20

    It's also important to note that MongoDB has the concept of "authentication database", which can be different than the database you are connecting to. For example, if you use the official Docker image for Mongo and specify the environment variables MONGO_INITDB_ROOT_USERNAME and MONGO_INITDB_ROOT_PASSWORD, a user will be created on 'admin' database, which is probably not the database you want to use. In this case, you should specify parameters accordingly on your application.properties file using:

    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>
    
    0 讨论(0)
  • 2020-12-12 19:22

    In a maven project create a file src/main/resources/application.yml with the following content:

    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 will automatically use this file to configure your application. Then you can start your spring boot application either with the integration profile (and use your local MongoDB)

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

    or with the production profile (and use your production MongoDB)

    java -jar -Dspring.profiles.active=production your-app.jar
    
    0 讨论(0)
  • 2020-12-12 19:24

    spring.data.mongodb.host and spring.data.mongodb.port are not supported if you’re using the Mongo 3.0 Java driver. In such cases, spring.data.mongodb.uri should be used to provide all of the configuration, like this:

    spring.data.mongodb.uri=mongodb://user:secret@mongo1.example.com:12345
    
    0 讨论(0)
  • 2020-12-12 19:24

    Here is How you can do in Spring Boot 2.0 by creating custom MongoClient adding Providing more control for Connection ,

    Please follow github Link for Full Source Code

    @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;
        }} 
    
    0 讨论(0)
  • 2020-12-12 19:28

    Just to quote Boot Docs:

    You can set spring.data.mongodb.uri property to change the url, or alternatively specify a host/port. For example, you might declare the following in your application.properties:

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

    All available options for spring.data.mongodb prefix are fields of 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;
    
    0 讨论(0)
  • 2020-12-12 19:29

    You can define more details by extending 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;
        }
    }
    
    0 讨论(0)
提交回复
热议问题