From c0190d7ecdfbfab30dba12c666c224fd91fcd0a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=80=E6=BA=90=E6=B5=B7=E5=93=A5?= Date: Tue, 28 Mar 2023 09:57:21 +0800 Subject: [PATCH] optimize Audit module --- .../core/audit/ConsoleAuditMessageSender.java | 2 +- .../audit/DefaultAuditMessageCollector.java | 22 ++++++++++++++++--- 2 files changed, 20 insertions(+), 4 deletions(-) diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleAuditMessageSender.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleAuditMessageSender.java index d35ca060..8e3d65ce 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleAuditMessageSender.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/ConsoleAuditMessageSender.java @@ -25,7 +25,7 @@ public class ConsoleAuditMessageSender implements AuditMessageSender { @Override public void sendMessages(List messages) { for (AuditMessage message : messages) { - System.out.println(">>>>>> AUDIT: " + message.toString()); + System.out.println(">>>>>> Sql Audit: " + message.toString()); } } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCollector.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCollector.java index 2824c8e1..64085af5 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCollector.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/audit/DefaultAuditMessageCollector.java @@ -21,6 +21,7 @@ import java.util.List; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; +import java.util.concurrent.locks.ReentrantReadWriteLock; /** * 默认的审计消息收集器,其收集消息后,定时通过消息发送器{@link AuditMessageSender}把消息发送过去 @@ -32,6 +33,7 @@ public class DefaultAuditMessageCollector implements AuditMessageCollector, Runn private AuditMessageSender messageSender = new ConsoleAuditMessageSender(); private List messages = Collections.synchronizedList(new ArrayList<>()); + private ReentrantReadWriteLock rrwLock = new ReentrantReadWriteLock(); public DefaultAuditMessageCollector() { scheduler = Executors.newSingleThreadScheduledExecutor(runnable -> { @@ -49,7 +51,12 @@ public class DefaultAuditMessageCollector implements AuditMessageCollector, Runn @Override public void collect(AuditMessage message) { - messages.add(message); + try { + rrwLock.readLock().lock(); + messages.add(message); + } finally { + rrwLock.readLock().unlock(); + } } @@ -58,8 +65,17 @@ public class DefaultAuditMessageCollector implements AuditMessageCollector, Runn if (messages.isEmpty()) { return; } - List sendMessages = new ArrayList(messages); - messages.clear(); + + List sendMessages; + + try { + rrwLock.writeLock().lock(); + sendMessages = new ArrayList<>(messages); + messages.clear(); + } finally { + rrwLock.writeLock().unlock(); + } + messageSender.sendMessages(sendMessages); } }