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); } }