Как включить 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();
}
}