From 23ea694c0cefaf785ac762b37f40d402917fc6de Mon Sep 17 00:00:00 2001 From: Alexander Date: Mon, 18 Apr 2022 08:44:49 +0300 Subject: [PATCH] feature: add event store improvements --- .../java/com/eventsourcing/es/EventStore.java | 38 ++++++++++++++----- 1 file changed, 28 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/eventsourcing/es/EventStore.java b/src/main/java/com/eventsourcing/es/EventStore.java index 82933dc..22f84fb 100644 --- a/src/main/java/com/eventsourcing/es/EventStore.java +++ b/src/main/java/com/eventsourcing/es/EventStore.java @@ -37,17 +37,35 @@ public class EventStore implements EventStoreDB { if (events.isEmpty()) return; final List changes = new ArrayList<>(events); - changes.forEach(event -> { - int result = jdbcTemplate.update(SAVE_EVENTS_QUERY, Map.of( - AGGREGATE_ID, event.getAggregateId(), - AGGREGATE_TYPE, event.getAggregateType(), - EVENT_TYPE, event.getEventType(), - DATA, Objects.isNull(event.getData()) ? new byte[]{} : event.getData(), - METADATA, Objects.isNull(event.getMetaData()) ? new byte[]{} : event.getMetaData(), - VERSION, event.getVersion())); + if (changes.size() > 1) { + this.eventsBatchInsert(changes); + return; + } - log.info("(saveEvents) saved result: {}, event: {}", result, event); - }); + final Event event = changes.get(0); + int result = jdbcTemplate.update(SAVE_EVENTS_QUERY, Map.of( + AGGREGATE_ID, event.getAggregateId(), + AGGREGATE_TYPE, event.getAggregateType(), + EVENT_TYPE, event.getEventType(), + DATA, Objects.isNull(event.getData()) ? new byte[]{} : event.getData(), + METADATA, Objects.isNull(event.getMetaData()) ? new byte[]{} : event.getMetaData(), + VERSION, event.getVersion())); + log.info("(saveEvents) saved result: {}, event: {}", result, event); + } + + + @NewSpan + private void eventsBatchInsert(@SpanTag("events") List events) { + final var args = events.stream().map(event -> Map.of( + AGGREGATE_ID, event.getAggregateId(), + AGGREGATE_TYPE, event.getAggregateType(), + EVENT_TYPE, event.getEventType(), + DATA, Objects.isNull(event.getData()) ? new byte[]{} : event.getData(), + METADATA, Objects.isNull(event.getMetaData()) ? new byte[]{} : event.getMetaData(), + VERSION, event.getVersion())).toList(); + final Map[] maps = args.toArray(new Map[0]); + int[] ints = jdbcTemplate.batchUpdate(SAVE_EVENTS_QUERY, maps); + log.info("(saveEvents) BATCH saved result: {}, event: {}", ints); } @Override