Spring事件发布异步
消息实体
package com.ruoyi.community.listener.register;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.servlet.http.HttpServletRequest;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RegisterEventDto {
private HttpServletRequest request;
private String name;
private String msg;
private Date createTime;
}
监听器
package com.ruoyi.community.listener.register;
import com.ruoyi.common.utils.LogUtils;
import com.ruoyi.common.utils.ip.AddressUtils;
import com.ruoyi.common.utils.ip.IpUtils;
import com.ruoyi.community.domain.RegisteInfo;
import com.ruoyi.community.service.RegisteInfoService;
import eu.bitwalker.useragentutils.UserAgent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
import java.util.Date;
@Component
public class RegisterEventListener {
@Autowired
private RegisteInfoService registeInfoService;
@Async("threadPoolTaskExecutor")
@EventListener(RegisterEventDto.class)
public void handleEvent(RegisterEventDto registerEventDto){
final UserAgent userAgent = UserAgent.parseUserAgentString(registerEventDto.getRequest().getHeader("User-Agent"));
final String ip = IpUtils.getIpAddr(registerEventDto.getRequest());
String address = AddressUtils.getRealAddressByIP(ip);
实现
@Resource
private ApplicationEventPublisher eventPublisher;
...
RegisterEventDto registerEventDto = new RegisterEventDto();
registerEventDto.setRequest(ServletUtils.getRequest());
registerEventDto.setName(cleaner.getName());
registerEventDto.setCreateTime(cleaner.getCreateTime());
registerEventDto.setMsg("保洁创建成功");
eventPublisher.publishEvent(registerEventDto);
...
配置
@EnableAsync
public class RuoYiApplication
{
...
}