List of usage examples for com.mongodb.event CommandListener CommandListener
CommandListener
From source file:com.example.App.java
License:Apache License
public static void main(String[] args) throws InterruptedException { final MongoClientSettings settings = MongoClientSettings.builder() .addCommandListener(new CommandListener() { @Override// w w w . jav a 2 s.co m public void commandStarted(CommandStartedEvent event) { logger.info("command: db = {}, command = {}", event.getDatabaseName(), event.getCommandName()); } @Override public void commandSucceeded(CommandSucceededEvent event) { logger.info("command succeed: request = {}, command = {}", event.getRequestId(), event.getCommandName()); } @Override public void commandFailed(CommandFailedEvent event) { logger.info("command failed: request = {}, command = {}", event.getRequestId(), event.getCommandName()); logger.error("detail", event.getThrowable()); } }).applicationName("sample-app") .applyToConnectionPoolSettings(builder -> builder.maxSize(1).minSize(1)).build(); final MongoClient client = MongoClients.create(settings); final MongoDatabase database = client.getDatabase("sample"); final MongoCollection<Document> collection = database.getCollection("test"); final Document firstDocument = new Document("id", UUID.randomUUID()).append("name", "test user") .append("created", LocalDateTime.now()); logger.info("document to be saved: {}", firstDocument); final Mono<Document> firstMono = Mono.create(sink -> collection.insertOne(firstDocument, (result, t) -> { if (t == null) { logger.info("inserted: {}", firstDocument); sink.success(firstDocument); } else { logger.error("error", t); sink.error(t); } })); final Mono<List<Document>> secondMono = create100Users(collection, firstMono); final Mono<Long> thirdMono = secondMono.then(Mono.create(sink -> collection.countDocuments((count, t) -> { if (t == null) { logger.info("collection has {} items.", count); sink.success(count); } else { logger.error("error", t); sink.error(t); } }))); final Mono<List<Document>> fourthMono = create100Users(collection, thirdMono); final Mono<List<Document>> fifthMono = create100Users(collection, fourthMono); final Mono<List<Document>> sixthMono = create100Users(collection, fifthMono); final Mono<Document> seventhMono = sixthMono.then(Mono.create(sink -> collection.find().first((doc, t) -> { if (t == null) { logger.info("found document: {}", doc); sink.success(doc); } else { logger.error("error", t); sink.error(t); } }))); final CountDownLatch latch = new CountDownLatch(1); seventhMono.doOnTerminate(() -> { latch.countDown(); client.close(); }).subscribe(doc -> logger.info("first document: {}", doc)); latch.await(); }