mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 09:08:24 +08:00
optimize Audit module
This commit is contained in:
parent
45f9b65036
commit
c0190d7ecd
@ -25,7 +25,7 @@ public class ConsoleAuditMessageSender implements AuditMessageSender {
|
||||
@Override
|
||||
public void sendMessages(List<AuditMessage> messages) {
|
||||
for (AuditMessage message : messages) {
|
||||
System.out.println(">>>>>> AUDIT: " + message.toString());
|
||||
System.out.println(">>>>>> Sql Audit: " + message.toString());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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<AuditMessage> 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<AuditMessage> sendMessages = new ArrayList(messages);
|
||||
messages.clear();
|
||||
|
||||
List<AuditMessage> sendMessages;
|
||||
|
||||
try {
|
||||
rrwLock.writeLock().lock();
|
||||
sendMessages = new ArrayList<>(messages);
|
||||
messages.clear();
|
||||
} finally {
|
||||
rrwLock.writeLock().unlock();
|
||||
}
|
||||
|
||||
messageSender.sendMessages(sendMessages);
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user