Как включить ssl в реактивном клиенте mongodb при весенней загрузке?

Я в настоящее время сталкиваюсь с проблемой при создании реактивного монгоклиента, когда я предоставляю URL с опцией ssl=true. Я создаю конфигурационный класс при весенней загрузке, где я создаю Reactive mongoclient, используя следующую опцию: MongoClients.create(Соединения звонят Conn) Здесь, когда я пытаюсь подключиться к БД без настроек ssl, она работает, но с включенной опцией ssl я получаю ошибка о том, что класс NettyEventLoop не найден. Может кто-нибудь предложить, что я могу сделать, чтобы исправить эту проблему

1 ответ

Решение

Мне удалось преодолеть эту проблему, настроив MongoClientSettingsBuilderCustomizer и NioEventLoop Group. Пожалуйста, найдите ниже код:

private NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();

 @Bean
           public MongoClientSettingsBuilderCustomizer sslCustomizer() {
                return clientSettingsBuilder -> clientSettingsBuilder
                        .sslSettings(SslSettings.builder()
                                .enabled(true)
                                .invalidHostNameAllowed(true)
                                .build())
                        .streamFactoryFactory(NettyStreamFactoryFactory.builder()
                                .eventLoopGroup(eventLoopGroup).build());
            }

Кажется, что API изменился, поэтому, начиная с драйвера MongoDB v3.8, этот метод называется "applyToSslSettings":

import com.mongodb.Block;
import com.mongodb.connection.SslSettings;
import com.mongodb.connection.SslSettings.Builder;
import com.mongodb.connection.netty.NettyStreamFactoryFactory;

import io.netty.channel.nio.NioEventLoopGroup;

@Configuration
public class Config {

    private NioEventLoopGroup eventLoopGroup = new NioEventLoopGroup();

    @Bean
    public MongoClientSettingsBuilderCustomizer sslCustomizer() {

        Block<SslSettings.Builder> sslSettingsBlock = new Block<SslSettings.Builder>() {
            @Override
            public void apply(Builder t) {
                t.applySettings(SslSettings.builder()
                .enabled(true)
                .invalidHostNameAllowed(true)
                .build());
            }
        };

        return clientSettingsBuilder -> clientSettingsBuilder
                .applyToSslSettings(sslSettingsBlock)
                .streamFactoryFactory(NettyStreamFactoryFactory.builder()
                        .eventLoopGroup(eventLoopGroup).build());
    }

    @PreDestroy
    public void shutDownEventLoopGroup() {
        eventLoopGroup.shutdownGracefully();
    }
}
Другие вопросы по тегам