optimize Audit module

This commit is contained in:
开源海哥 2023-03-28 09:57:21 +08:00
parent 45f9b65036
commit c0190d7ecd
2 changed files with 20 additions and 4 deletions

View File

@ -25,7 +25,7 @@ public class ConsoleAuditMessageSender implements AuditMessageSender {
@Override @Override
public void sendMessages(List<AuditMessage> messages) { public void sendMessages(List<AuditMessage> messages) {
for (AuditMessage message : messages) { for (AuditMessage message : messages) {
System.out.println(">>>>>> AUDIT: " + message.toString()); System.out.println(">>>>>> Sql Audit: " + message.toString());
} }
} }

View File

@ -21,6 +21,7 @@ import java.util.List;
import java.util.concurrent.Executors; import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/** /**
* 默认的审计消息收集器其收集消息后定时通过消息发送器{@link AuditMessageSender}把消息发送过去 * 默认的审计消息收集器其收集消息后定时通过消息发送器{@link AuditMessageSender}把消息发送过去
@ -32,6 +33,7 @@ public class DefaultAuditMessageCollector implements AuditMessageCollector, Runn
private AuditMessageSender messageSender = new ConsoleAuditMessageSender(); private AuditMessageSender messageSender = new ConsoleAuditMessageSender();
private List<AuditMessage> messages = Collections.synchronizedList(new ArrayList<>()); private List<AuditMessage> messages = Collections.synchronizedList(new ArrayList<>());
private ReentrantReadWriteLock rrwLock = new ReentrantReadWriteLock();
public DefaultAuditMessageCollector() { public DefaultAuditMessageCollector() {
scheduler = Executors.newSingleThreadScheduledExecutor(runnable -> { scheduler = Executors.newSingleThreadScheduledExecutor(runnable -> {
@ -49,7 +51,12 @@ public class DefaultAuditMessageCollector implements AuditMessageCollector, Runn
@Override @Override
public void collect(AuditMessage message) { public void collect(AuditMessage message) {
try {
rrwLock.readLock().lock();
messages.add(message); messages.add(message);
} finally {
rrwLock.readLock().unlock();
}
} }
@ -58,8 +65,17 @@ public class DefaultAuditMessageCollector implements AuditMessageCollector, Runn
if (messages.isEmpty()) { if (messages.isEmpty()) {
return; return;
} }
List<AuditMessage> sendMessages = new ArrayList(messages);
List<AuditMessage> sendMessages;
try {
rrwLock.writeLock().lock();
sendMessages = new ArrayList<>(messages);
messages.clear(); messages.clear();
} finally {
rrwLock.writeLock().unlock();
}
messageSender.sendMessages(sendMessages); messageSender.sendMessages(sendMessages);
} }
} }