从 Spring Data Mongo 中删除默认本地主机

问题描述 投票:0回答:2

问题 Springboot应用程序尝试连接本地Mongo而不是远程Mongo。

研究 一个简单的示例应用程序。

pom.xml

        <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.5.5</version>
        <relativePath/> <!-- lookup parent from repository -->
      </parent>
      <groupId>com.example</groupId>
      <artifactId>mongo-test</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <name>mongo-test</name>
      <description>mongo-test</description>
      <properties>
        <java.version>11</java.version>
      </properties>
      <dependencies>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-data-mongodb-reactive</artifactId>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-webflux</artifactId>
        </dependency>
    
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-devtools</artifactId>
          <scope>runtime</scope>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>org.projectlombok</groupId>
          <artifactId>lombok</artifactId>
          <optional>true</optional>
        </dependency>
        <dependency>
          <groupId>org.springframework.boot</groupId>
          <artifactId>spring-boot-starter-test</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>io.projectreactor</groupId>
          <artifactId>reactor-test</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies>
    
      <build>
        <plugins>
          <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
              <excludes>
                <exclude>
                  <groupId>org.projectlombok</groupId>
                  <artifactId>lombok</artifactId>
                </exclude>
              </excludes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    
    </project>

Application.java
班级

  package com.example.mongotest;
  
  import com.mongodb.ConnectionString;
  import com.mongodb.MongoClientSettings;
  import com.mongodb.connection.netty.NettyStreamFactoryFactory;
  import com.mongodb.reactivestreams.client.MongoClient;
  import com.mongodb.reactivestreams.client.MongoClients;
  import org.springframework.boot.SpringApplication;
  import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
  import org.springframework.boot.autoconfigure.SpringBootApplication;
  import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
  import org.springframework.boot.autoconfigure.mongo.MongoAutoConfiguration;
  import org.springframework.context.annotation.Bean;
  import org.springframework.data.mongodb.config.AbstractReactiveMongoConfiguration;
  import org.springframework.data.mongodb.core.ReactiveMongoClientFactoryBean;
  import org.springframework.data.mongodb.repository.config.EnableReactiveMongoRepositories;
  
  @EnableReactiveMongoRepositories
  @SpringBootApplication
  public class MongoTestApplication extends AbstractReactiveMongoConfiguration {
  
    public static void main(String[] args) {
      SpringApplication.run(MongoTestApplication.class, args);
    }
  
    @Bean
    public MongoClient mongoClient() {
      return Clients.create(
              "mongodb://user:[email protected]:27017/database?authSource=admin");
    }
  
    @Override
    protected String getDatabaseName() {
      return "database";
    }
  }

日志:

  .   ____          _            __ _ _
      /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
      ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
      \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
      '  |____| .__|_| |_|_| |_\__, | / / / /
      =========|_|==============|___/=/_/_/_/
      :: Spring Boot ::                (v2.5.5)
  
      2021-10-06 14:51:54.302  INFO 1034758 --- [  restartedMain] c.e.mongotest.MongoTestApplication       : Starting MongoTestApplication using Java 11.0.10
      2021-10-06 14:51:54.303  INFO 1034758 --- [  restartedMain] c.e.mongotest.MongoTestApplication       : No active profile set, falling back to default profiles: default
      2021-10-06 14:51:54.465  INFO 1034758 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data Reactive MongoDB repositories in DEFAULT mode.
      2021-10-06 14:51:54.493  INFO 1034758 --- [  restartedMain] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 26 ms. Found 2 Reactive MongoDB repository interfaces.
      2021-10-06 14:51:54.706  INFO 1034758 --- [  restartedMain] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[11.111.111.11:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}
      2021-10-06 14:51:54.719  INFO 1034758 --- [  restartedMain] org.mongodb.driver.cluster               : Cluster created with settings {hosts=[127.0.0.1:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms'}
      2021-10-06 14:51:54.725  INFO 1034758 --- [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.internal.connection.AsynchronousSocketChannelStream$OpenCompletionHandler.failed(AsynchronousSocketChannelStream.java:124) ~[mongodb-driver-core-4.2.3.jar:na]
      at java.base/sun.nio.ch.Invoker.invokeUnchecked(Invoker.java:129) ~[na:na]
      at java.base/sun.nio.ch.Invoker$2.run(Invoker.java:219) ~[na:na]
      at java.base/sun.nio.ch.AsynchronousChannelGroupImpl$1.run(AsynchronousChannelGroupImpl.java:112) ~[na:na]
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
      at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
      Caused by: java.net.ConnectException: Connection is refused
      at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.checkConnect(Native Method) ~[na:na]
      at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finishConnect(UnixAsynchronousSocketChannelImpl.java:252) ~[na:na]
      at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.finish(UnixAsynchronousSocketChannelImpl.java:198) ~[na:na]
      at java.base/sun.nio.ch.UnixAsynchronousSocketChannelImpl.onEvent(UnixAsynchronousSocketChannelImpl.java:213) ~[na:na]
      at java.base/sun.nio.ch.EPollPort$EventHandlerTask.run(EPollPort.java:306) ~[na:na]
      ... 1 common frames omitted
  
      2021-10-06 14:51:54.782  INFO 1034758 --- [  restartedMain] o.s.b.d.a.OptionalLiveReloadServer       : LiveReload server is running on port 35729
      2021-10-06 14:51:54.980  INFO 1034758 --- [  restartedMain] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
      2021-10-06 14:51:54.986  INFO 1034758 --- [  restartedMain] c.e.mongotest.MongoTestApplication       : Started MongoTestApplication in 0.819 seconds (JVM running for 1.152)
      2021-10-06 14:51:55.451  INFO 1034758 --- [22.222.22:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:1, serverValue:289157}] to 11.111.111.11:27017
      2021-10-06 14:51:55.451  INFO 1034758 --- [22.222.22:27017] org.mongodb.driver.connection            : Opened connection [connectionId{localValue:2, serverValue:289158}] to 11.111.111.11:27017
      2021-10-06 14:51:55.451  INFO 1034758 --- [22.222.22:27017] org.mongodb.driver.cluster               : Monitor thread successfully connected to server with description ServerDescription{address=11.111.111.11:27017, type=STANDALONE, state=CONNECTED, ok=true, minWireVersion=0, maxWireVersion=9, maxDocumentSize=16777216, logicalSessionTimeoutMinutes=30, roundTripTimeNanos=325549357}

问题 我不想连接 127.0.0.1 上的本地 MongoDb。我想连接11.111.111.11远程MongoDb。如何设置 Spring Data Mongo 应用程序不连接 127.0.0.1?

mongodb spring-data
2个回答
0
投票

根本原因终于解决了。尽管我尝试禁用各种自动配置:

@SpringBootApplication(
exclude = {
  MongoAutoConfiguration.class,
  MongoReactiveAutoConfiguration.class,
  MongoDataAutoConfiguration.class,
  EmbeddedMongoAutoConfiguration.class
})

这不是必需的,因为调用

127.0.0.1
源自我必须删除的
AbstractReactiveMongoConfiguration
类:

public class MongoTestApplication extends AbstractReactiveMongoConfiguration {}

-1
投票

消除实现 AbstractReactiveMongoConfiguration y meti,toda la comunicacion por la URI y omiite la conexion con localhost

@Configuration
public class MongoConfig {

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

    @Bean
    MongoClient mongoClient() {
        MongoClientSettings settings = MongoClientSettings.builder()
                .applyConnectionString(new ConnectionString(uri))
                .build();
        return MongoClients.create(settings);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.