Set transaction isolation to read_uncommitted due to @Async (#1916)

* Set transaction isolation to read_uncommitted due to @Async

Comment events handlers are executed asynchronously.
And default transaction isolation is read_committed,
so the handlers can not see the comments created by event dispatcher

Signed-off-by: johnniang <johnniang@fastmail.com>

* Use @TransactionalEventListener instead

Signed-off-by: johnniang <johnniang@fastmail.com>
pull/2076/head
John Niang 2022-05-06 13:08:13 +08:00 committed by GitHub
parent bca4e53e77
commit 15d2f8e56c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 4 additions and 4 deletions

View File

@ -4,9 +4,9 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async; import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.event.TransactionalEventListener;
import run.halo.app.event.comment.CommentNewEvent; import run.halo.app.event.comment.CommentNewEvent;
import run.halo.app.event.comment.CommentReplyEvent; import run.halo.app.event.comment.CommentReplyEvent;
import run.halo.app.exception.ServiceException; import run.halo.app.exception.ServiceException;
@ -88,12 +88,12 @@ public class CommentEventListener {
} }
/** /**
* Received a new new comment event. * Received a new comment event.
* *
* @param newEvent new comment event. * @param newEvent new comment event.
*/ */
@Async @Async
@EventListener @TransactionalEventListener
public void handleCommentNewEvent(CommentNewEvent newEvent) { public void handleCommentNewEvent(CommentNewEvent newEvent) {
Boolean newCommentNotice = optionService Boolean newCommentNotice = optionService
.getByPropertyOrDefault(CommentProperties.NEW_NOTICE, Boolean.class, false); .getByPropertyOrDefault(CommentProperties.NEW_NOTICE, Boolean.class, false);
@ -181,7 +181,7 @@ public class CommentEventListener {
* @param replyEvent reply comment event. * @param replyEvent reply comment event.
*/ */
@Async @Async
@EventListener @TransactionalEventListener
public void handleCommentReplyEvent(CommentReplyEvent replyEvent) { public void handleCommentReplyEvent(CommentReplyEvent replyEvent) {
Boolean replyCommentNotice = optionService Boolean replyCommentNotice = optionService
.getByPropertyOrDefault(CommentProperties.REPLY_NOTICE, Boolean.class, false); .getByPropertyOrDefault(CommentProperties.REPLY_NOTICE, Boolean.class, false);