Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring被动MongoDB连接到MongoDB云_Java_Spring_Mongodb_Spring Data_Spring Data Mongodb - Fatal编程技术网

Java Spring被动MongoDB连接到MongoDB云

Java Spring被动MongoDB连接到MongoDB云,java,spring,mongodb,spring-data,spring-data-mongodb,Java,Spring,Mongodb,Spring Data,Spring Data Mongodb,我从下载了这个例子 我不明白如何让它工作 我在中设置了一个群集,他们为我提供: 如果我使用的是driver 3.6或更高版本: mongodb+srv://stavalfi:<PASSWORD>@cluster0-9yjy8.mongodb.net/test 如何修复此问题?我认为它没有SSL证书,或者可能是错误的或虚拟的SSL证书。这就是为什么在java.nio.channels.AsynchronousSocketChannel中不显示SSL支持的原因,文档中有: 如果您使用的

我从下载了这个例子

我不明白如何让它工作

我在中设置了一个群集,他们为我提供:

如果我使用的是driver 3.6或更高版本:

mongodb+srv://stavalfi:<PASSWORD>@cluster0-9yjy8.mongodb.net/test
如何修复此问题?

我认为它没有SSL证书,或者可能是错误的或虚拟的SSL证书。这就是为什么在java.nio.channels.AsynchronousSocketChannel中不显示SSL支持的原因,文档中有:

如果您使用的是被动驱动程序,则SSL需要Netty。如果Netty可用且要使用的工厂尚未自定义,则自动配置会自动配置此工厂


确保在类路径上有netty,或者是选定的模块,或者是netty all。

对此进行了一些处理。您可以从中找到详细信息

首先,我尝试使用DSL方法,将所有设置都作为代码使用会很好:

application.yml

但是,这会崩溃,因为Netty通过Java堆栈触发DNS查找,但失败:

[DEBUG][TestEventLogger]2018-08-06 17:22:17.147信息16148-[localhost:27017]org.mongodb.driver.cluster:连接到服务器localhost:27017时监视器线程中出现异常 [调试][TestEventLogger] [DEBUG][TestEventLogger]com.mongodb.MongoSocketOpenException:异常打开套接字 […堆栈跟踪…] [调试][TestEventLogger] [DEBUG][TestEventLogger]2018-08-06 17:22:17.278信息16148-[Test worker]org.mongodb.driver.cluster:使用以下设置创建的群集{hosts=[training abcde.mongodb.net:27017],mode=MULTIPLE,required clusterType=UNKNOWN,serverSelectionTimeout=30000ms',maxWaitQueueSize=500} [DEBUG][TestEventLogger]2018-08-06 17:22:17.279信息16148-[Test worker]org.mongodb.driver.cluster:将发现的服务器培训abcde.mongodb.net:27017添加到集群的客户端视图 [DEBUG][TestEventLogger]2018-08-06 17:22:17.975 INFO 16148-[Test worker]org.mongodb.driver.cluster:使用以下设置创建的群集{hosts=[localhost:27017],mode=SINGLE,requiredClusterType=UNKNOWN,serverSelectionTimeout='30000ms',maxWaitQueueSize=500} [TestEventLogger]2018-08-06 17:22:18.006信息16148-[ngodb.net:27017]org.mongodb.driver.cluster:连接到服务器时监视器线程出现异常培训abcde.mongodb.net:27017 [调试][TestEventLogger] [DEBUG][TestEventLogger]com.mongodb.MongoSocketOpenException:异常打开套接字 […堆栈跟踪…] [DEBUG][TestEventLogger]原因:java.net.UnknownHostException:没有已知的此类主机training-abcde.mongodb.net 位于java.base/java.net.Inet6AddressImpl.LookupAllHostAddrActive方法的[DEBUG][TestEventLogger] [调试][TestEventLogger]位于java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddrInetAddress.java:925~[na:na] java.base/java.net.InetAddress.getAddressesFromNameServiceNetAddress.java:1505~[na:na]上的[DEBUG][TestEventLogger] [调试][TestEventLogger]位于java.base/java.net.InetAddress$nameserviceAddresss.getInetAddress.java:844~[na:na] 在java.base/java.net.InetAddress.getAllByName0InetAddress.java:1495~[na:na]上的[DEBUG][TestEventLogger] 位于java.base/java.net.InetAddress.getAllByNameInetAddress.java:1354~[na:na]的[DEBUG][TestEventLogger] 在java.base/java.net.InetAddress.getAllByNameInetAddress.java:1288~[na:na]上的[DEBUG][TestEventLogger] java.base/java.net.InetAddress.getByNameInetAddress.java:1238~[na:na]上的[DEBUG][TestEventLogger] [DEBUG][TestEventLogger]位于io.netty.util.internal.SocketUtils$8.runSocketUtils.java:146~[netty-common-4.1.25.Final.jar:4.1.25.Final] [DEBUG][TestEventLogger]位于io.netty.util.internal.SocketUtils$8.runSocketUtils.java:143~[netty-common-4.1.25.Final.jar:4.1.25.Final] java.base/java.security.AccessController.doPrivilegeEdNative方法中的[DEBUG][TestEventLogger]

但通过连接URL做一些不那么优雅的事情似乎是可行的:

ApplicationConfiguration.java:

[DEBUG][TestEventLogger]2018-08-06 18:25:37.132信息4252-[Test worker]org.mongodb.driver.cluster:使用设置创建的集群{hosts=[training-shard-00-00-abcde.mongodb.net:27017,training-shard-00-01-abcde.mongodb.net:27017],mode=MULTIPLE,requiredClusterType=REPLICA\u SET,serverSelectionTimeout='30000 ms',maxWaitQueueSize=500,requiredcreplicasetname='training-shard-0'} [DEBUG][TestEventLogger]2018-08-06 18:25:37.132信息4252-[Test worker]org.mongodb.driver.cluster:将发现的服务器training-shard-00-abcde.mongodb.net:27017添加到集群的客户端视图 [调试][TestEventLogger]2018-08-06 18:25:37.135信息4252-[Test worker]org.mongodb.driver.cluster :将发现的服务器training-shard-00-01-abcde.mongodb.net:27017添加到群集的客户端视图 [DEBUG][TestEventLogger]2018-08-06 18:25:37.139信息4252-[Test worker]org.mongodb.driver.cluster:将发现的服务器training-shard-00-02-abcde.mongodb.net:27017添加到集群的客户端视图 [DEBUG][TestEventLogger]2018-08-06 18:25:37.831信息4252-[Test worker]org.mongodb.driver.cluster:使用以下设置创建的群集{hosts=[localhost:27017],mode=SINGLE,requiredClusterType=UNKNOWN,serverSelectionTimeout='30000ms',maxWaitQueueSize=500} [DEBUG][TestEventLogger]2018-08-06 18:25:38.450信息4252-[ngodb.net:27017]org.mongodb.driver.connection:打开连接[connectionId{localValue:2,serverValue:161155}]到training-shard-00-00-abcde.mongodb.net:27017 [DEBUG][TestEventLogger]2018-08-06 18:25:38.468信息4252-[ngodb.net:27017]org.mongodb.driver.cluster:监视器线程成功连接到服务器,描述为ServerDescription{address=training-shard-00-00-abcde.mongodb.net:27017,type=REPLICA\u SET\u PRIMARY,state=connected,ok=true,version=ServerVersion{versionList=[3,6,6]},minWireVersion=0,maxWireVersion=6,maxDocumentSize=16777216,logicalSessionTimeoutMinutes=30,roundTripTimeNanos=16287599,setName='training-shard-0',canonicalAddress=training-shard-00-abcde.mongodb.net:27017,主机=[training-shard-00-00-abcde.mongodb.net:27017,training-shard-00-02-abcde.mongodb.net:27017,training-shard-00-01-abcde.mongodb.net:27017],被动式=[],仲裁者=[],primary='training-shard-00-00-abcde.mongodb.net:27017',tagSet=tagSet{[],electionId=7FFFFF0000000008,setVersion=1,lastWriteDate=Mon Aug 06 18:25:37 SRET 2018,lastUpdateTimeNanos=70366873909383} [DEBUG][TestEventLogger]2018-08-06 18:25:38.473信息4252-[ngodb.net:27017]org.mongodb.driver.cluster:从副本集primary training-shard-00-00-abcde.mongodb.net:27017将最大选举id设置为7fffffff000000000000000000008 [DEBUG][TestEventLogger]2018-08-06 18:25:38.474信息4252-[ngodb.net:27017]org.mongodb.driver.cluster:从副本集primary training-shard-00-abcde.mongodb.net:27017将最大集版本设置为1 [DEBUG][TestEventLogger]2018-08-06 18:25:38.475信息4252-[ngodb.net:27017]org.mongodb.driver.cluster:Discovered replica set primary training-shard-00-00-abcde.mongodb.net:27017 [DEBUG][TestEventLogger]2018-08-06 18:25:38.479信息4252-[ngodb.net:27017]org.mongodb.driver.connection:打开连接[connectionId{localValue:4,serverValue:71172}]到training-shard-00-02-abcde.mongodb.net:27017 [DEBUG][TestEventLogger]2018-08-06 18:25:38.496信息4252-[ngodb.net:27017]org.mongodb.driver.cluster:监视器线程成功连接到服务器,描述为ServerDescription{address=training-shard-00-02-abcde.mongodb.net:27017,type=REPLICA\u SET\u SECONDARY,state=connected,ok=true,version=ServerVersion{versionList=[3,6,6]},minWireVersion=0,maxWireVersion=6,maxDocumentSize=16777216,logicalSessionTimeoutMinutes=30,roundTripTimeNanos=16406907,setName='training-shard-0',canonicalAddress=training-shard-00-02-abcde.mongodb.net:27017,主机=[training-shard-00-00-abcde.mongodb.net:27017,training-shard-00-02-abcde.mongodb.net:27017,training-shard-00-01-abcde.mongodb.net:27017],被动式=[],仲裁者=[],primary='training-shard-00-00-abcde.mongodb.net:27017',tagSet=tagSet{[],electionId=null,setVersion=1,lastWriteDate=Mon Aug 06 18:25:37 SRET 2018,lastUpdateTimeNanos=7036690209001} [DEBUG][TestEventLogger]2018-08-06 18:25:38.497信息4252-[ngodb.net:27017]org.mongodb.driver.connection:打开连接[connectionId{localValue:3,serverValue:224436}]到training-shard-00-01-abcde.mongodb.net:27017 [DEBUG][TestEventLogger]2018-08-06 18:25:38.512信息4252-[ngodb.net:27017]org.mongodb.driver.cluster:监视器线程成功连接到服务器,描述为ServerDescription{address=training-shard-00-01-abcde.mongodb.net:27017,type=REPLICA\u SET\u SECONDARY,state=connected,ok=true,version=ServerVersion{versionList=[3,6,6]},minWireVersion=0,maxWireVersion=6,maxDocumentSize=16777216,logicalSessionTimeoutMinutes=30,roundTripTimeNanos=14614118,setName='training-shard-0',canonicalAddress=training-shard-00-01-abcde.mongodb.net:27017,主机=[training-shard-00-00-abcde.mongodb.net:27017,training-shard-00-02-abcde.mongodb.net:27017,training-shard-00-01-abcde.mongodb.net:27017],被动式=[],仲裁者=[],primary='training-shard-00-00-abcde.mongodb.net:27017',tagSet=tagSet{[],electionId=null,setVersion=1,lastWriteDate=Mon Aug 06 18:25:37 SRET 2018,lastUpdateTimeNanos=70366918148773}


你知道如何使它工作吗?或者它不在我的手中?还有,哪里有错误的或虚假的SSL证书?你能重试吗 第二,使用驱动程序3.4或earlierFor SSL支持使用com.mongodb.connection.netty.NettyStreamFactoryFactory…我找不到任何关于如何使用的完整示例。您能提供一个在spring-boot-2中使用它的简单示例吗?
mongodb://stavalfi:<PASSWORD>@cluster0-shard-00-00-
9yjy8.mongodb.net:27017,cluster0-shard-00-01-
9yjy8.mongodb.net:27017,cluster0-shard-00-02-
9yjy8.mongodb.net:27017/test?ssl=true&replicaSet=Cluster0-shard-
0&authSource=admin
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
@EnableReactiveMongoRepositories
@AutoConfigureAfter(EmbeddedMongoAutoConfiguration.class)
@RequiredArgsConstructor
class ApplicationConfiguration extends AbstractReactiveMongoConfiguration {

    private final Environment environment;

    public static void main(String args[]) throws InterruptedException {
        ConfigurableApplicationContext run = SpringApplication.run(ApplicationConfiguration.class);
        run.getBean(ReactiveMongoTemplate.class)
                .save("something to push")
                .subscribe(System.out::println, Throwable::printStackTrace, () -> System.out.println("success"));

        Thread.sleep(1000000);
    }

    @Bean
    public LoggingEventListener mongoEventListener() {
        return new LoggingEventListener();
    }

    @Override
    @Bean
    @DependsOn("embeddedMongoServer")
    public MongoClient reactiveMongoClient() {
        return MongoClients.create(String.format("mongodb+srv://stavalfi:<MyAccountPassword!>@cluster0-9yjy8.mongodb.net/test"));
//      int port = environment.getProperty("local.mongo.port", Integer.class);
//      return MongoClients.create(String.format("mongodb://localhost:%d", port));
    }

    @Override
    protected String getDatabaseName() {
        return "reactive";
    }
}
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'reactiveMongoClient' defined in example.springdata.mongodb.people.ApplicationConfiguration: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.mongodb.reactivestreams.client.MongoClient]: Factory method 'reactiveMongoClient' threw exception; nested exception is java.lang.UnsupportedOperationException: No SSL support in java.nio.channels.AsynchronousSocketChannel. For SSL support use com.mongodb.connection.netty.NettyStreamFactoryFactory
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:587) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1250) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1099) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:545) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:312) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:228) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:752) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
    at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:388) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1246) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
    at org.springframework.boot.SpringApplication.run(SpringApplication.java:1234) [spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]
    at example.springdata.mongodb.people.ApplicationConfiguration.main(ApplicationConfiguration.java:53) [classes/:na]
Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.mongodb.reactivestreams.client.MongoClient]: Factory method 'reactiveMongoClient' threw exception; nested exception is java.lang.UnsupportedOperationException: No SSL support in java.nio.channels.AsynchronousSocketChannel. For SSL support use com.mongodb.connection.netty.NettyStreamFactoryFactory
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:185) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:579) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    ... 17 common frames omitted
Caused by: java.lang.UnsupportedOperationException: No SSL support in java.nio.channels.AsynchronousSocketChannel. For SSL support use com.mongodb.connection.netty.NettyStreamFactoryFactory
    at com.mongodb.connection.AsynchronousSocketChannelStreamFactory.<init>(AsynchronousSocketChannelStreamFactory.java:58) ~[mongodb-driver-core-3.6.3.jar:na]
    at com.mongodb.connection.AsynchronousSocketChannelStreamFactory.<init>(AsynchronousSocketChannelStreamFactory.java:43) ~[mongodb-driver-core-3.6.3.jar:na]
    at com.mongodb.async.client.MongoClients.getStreamFactory(MongoClients.java:237) ~[mongodb-driver-async-3.6.3.jar:na]
    at com.mongodb.async.client.MongoClients.create(MongoClients.java:181) ~[mongodb-driver-async-3.6.3.jar:na]
    at com.mongodb.async.client.MongoClients.create(MongoClients.java:172) ~[mongodb-driver-async-3.6.3.jar:na]
    at com.mongodb.reactivestreams.client.MongoClients.create(MongoClients.java:90) ~[mongodb-driver-reactivestreams-1.7.1.jar:na]
    at com.mongodb.reactivestreams.client.MongoClients.create(MongoClients.java:75) ~[mongodb-driver-reactivestreams-1.7.1.jar:na]
    at example.springdata.mongodb.people.ApplicationConfiguration.reactiveMongoClient(ApplicationConfiguration.java:70) [classes/:na]
    at example.springdata.mongodb.people.ApplicationConfiguration$$EnhancerBySpringCGLIB$$6152c801.CGLIB$reactiveMongoClient$1(<generated>) ~[classes/:na]
    at example.springdata.mongodb.people.ApplicationConfiguration$$EnhancerBySpringCGLIB$$6152c801$$FastClassBySpringCGLIB$$4cbf5891.invoke(<generated>) ~[classes/:na]
    at org.springframework.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228) ~[spring-core-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at org.springframework.context.annotation.ConfigurationClassEnhancer$BeanMethodInterceptor.intercept(ConfigurationClassEnhancer.java:361) ~[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    at example.springdata.mongodb.people.ApplicationConfiguration$$EnhancerBySpringCGLIB$$6152c801.reactiveMongoClient(<generated>) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_161]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_161]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_161]
    at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_161]
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:154) ~[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]
    ... 18 common frames omitted
mongo:
  user: training_mongo
  password: <my_password>
  hosts:
    - training-abcde.mongodb.net
  database: training
@ConfigurationProperties("mongo")
@Component
public class MongoProperties {
    private String user;
    private String password;
    private List<String> hosts;
    private String database;
@Configuration
@EnableWebFlux
@EnableReactiveMongoRepositories
public class ApplicationConfig extends AbstractReactiveMongoConfiguration {

[...]

    @Override
    public MongoClient reactiveMongoClient() {
        return create(MongoClientSettings.builder()
                                         .clusterSettings(ClusterSettings.builder()
                                                                         .hosts(mongoProperties.getHosts()
                                                                                               .stream()
                                                                                               .map(ServerAddress::new)
                                                                                               .collect(toList()))
                                                                         .build())
                                         .streamFactoryFactory(NettyStreamFactory::new)
                                         .sslSettings(SslSettings.builder()
                                                                 .enabled(true)
                                                                 .build())
                                         .credential(MongoCredential.createCredential(
                                                 mongoProperties.getUser(),
                                                 mongoProperties.getDatabase(),
                                                 mongoProperties.getPassword().toCharArray()))
                                         .build());

    }

    @Override
    protected String getDatabaseName() {
        return DB_NAME;
    }
@Configuration
@EnableWebFlux
@EnableReactiveMongoRepositories
public class ApplicationConfig extends AbstractReactiveMongoConfiguration {

    private static final String CONNECTION_URL = "mongodb+srv://%s:%s@%s/%s?retryWrites=true&streamType=netty&ssl=true";

    [...]

    @Override
    public MongoClient reactiveMongoClient() {
        return MongoClients.create(getMongoConnectionUrl());
    }


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

    private String getMongoConnectionUrl() {
        String connectionUrl = String.format(CONNECTION_URL, mongoProperties.getUser(), mongoProperties.getPassword(),
                                             mongoProperties.getHosts().get(0), mongoProperties.getDatabase());

        return connectionUrl;
    }