import org.example.event.BusinessTrackEventEntity;
import org.example.event.PublisherCustomsEvent;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class CustomerController {
// @Value("${common.name}")
private String configs;
@Autowired
private PublisherCustomsEvent event;
@RequestMapping("/configs")
public String get() {
BusinessTrackEventEntity applicationEvent = new BusinessTrackEventEntity("开始了");
applicationEvent.setOperation("测试");
event.publisherEvent(applicationEvent);
return configs;
}
}
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.stereotype.Component;
@Component
public final class PublisherCustomsEvent {
@Autowired
private ApplicationEventPublisher applicationEventPublisher;
public void publisherEvent(ApplicationEvent applicationEvent){
applicationEventPublisher.publishEvent(applicationEvent);
}
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.ApplicationEvent;
import org.springframework.context.ApplicationListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
@Slf4j
@Component
//Application<ApplicationEvent>泛型类型也可以使用BusinessTrackEvent,如果是一个监听方法监听不同类型的事件可以使用ApplicationEvent,
// 如果针对具体某个事件的监听,泛型类型写具体的事件类型
public class CustomsEventListener implements ApplicationListener<ApplicationEvent> {
@Async
@Override
public void onApplicationEvent(ApplicationEvent event) {
try {
if (event instanceof BusinessTrackEventEntity) {
log.info("BusinessTrackEventEntity go ..................."+((BusinessTrackEventEntity) event).getOperation());
}
}catch (Exception e){
log.info(e.getMessage());
}
}
}
import lombok.Getter;
import lombok.Setter;
import org.springframework.context.ApplicationEvent;
@Getter
@Setter
public class BusinessTrackEventEntity extends ApplicationEvent {
private String operation;
public BusinessTrackEventEntity(Object source) {
super(source);
}
}