Spring 启动 - MongoDB - MongoLab 配置

Spring Boot - MongoDB - MongoLab configuration

我正在尝试配置我的 Spring 引导后端以连接到托管在 MongoLab 上的 MongoDB。

问题是它试图连接到本地主机。我得到的错误是:

2017-06-12 17:34:05.046  INFO 11843 --- [127.0.0.1:27017]
 org.mongodb.driver.cluster               : Exception in monitor thread while connecting to server 127.0.0.1:27017
com.mongodb.MongoSocketOpenException: Exception opening socket
        at com.mongodb.connection.SocketStream.open(SocketStream.java:63) ~[mongodb-driver-core-3.4.2.jar:na]
        at com.mongodb.connection.InternalStreamConnection.open(InternalStreamConnection.java:115) ~[mongodb-driver-core-3.4.2.jar:na]
        at com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run(DefaultServerMonitor.java:113) ~[mongodb-driver-core-3.4.2.jar:na]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_25]
Caused by: java.net.ConnectException: Connection refused
        at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_25]
        at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345) ~[na:1.8.0_25]
        at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_25]
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_25]
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_25]
        at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_25]
        at com.mongodb.connection.SocketStreamHelper.initialize(SocketStreamHelper.java:57) ~[mongodb-driver-core-3.4.2.jar:na]
        at com.mongodb.connection.SocketStream.open(SocketStream.java:58) ~[mongodb-driver-core-3.4.2.jar:na]
        ... 3 common frames omitted

我尝试排除 MongoAutoConfiguration.class 但我得到了同样的错误。

我的代码:

FoodappBackendApplication.java:

@SpringBootApplication
@EnableAutoConfiguration(exclude={MongoAutoConfiguration.class})
//@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
public class FoodappBackendApplication {

    public static void main(String[] args) {
        SpringApplication.run(FoodappBackendApplication.class, args);
    }
}

application.properties:

server.port=8181
spring.data.mongodb.host=mongoserver
spring.data.mongodb.database=foodapp
spring.data.mongodb.uri=mongodb://<myusername>:<mypassword>@ds123456.mlab.com:12345/foodapp
spring.data.mongodb.authentication-database: admin

SpringMongoConfig.java:

@Configuration
public class SpringMongoConfig extends AbstractMongoConfiguration {

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

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

pom.xml 依赖关系:

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-mongodb</artifactId>
            <version>1.10.4.RELEASE</version>
        </dependency>
    </dependencies>

非常感谢任何帮助!

我可以看到几个问题:

  1. 您打算使用 .yml 还是 .properties?假设您想使用 .yml,您应该将属性文件重命名为 application.yml
  2. 您的 YML 缩进有误。您的文件应如下所示: spring: data: mongodb: uri: # note the indentation level of this key Spring 然后转换为 属性 spring.data.mongodb.uri

SpringMongoConfig 中删除 @Bean mongo(),并就此删除 class,因为您已经在 application.properties 文件中提供了所有必要的配置。

将您的 FoodappBackendApplication 更新为

@SpringBootApplication
public class FoodappBackendApplication {

    public static void main(String[] args) {
        SpringApplication.run(FoodappBackendApplication.class, args);
    }
}

对于基于 Java 的配置,您可以查看此内容。

Spring Boot does not read MongoDB configuration from Java class