1、创建消息对象(参数)
public class DemoEvent extends ApplicationEvent {
private String data;//传递的数据,根据实际业务需求传递
public DemoEvent(Object source,String data){
super(source);//要实现父类构造方法,source可以是任意的
this.data = data;
}
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
}
}
2、创建发布者
@Component
public class DemoPublisher {
@Autowired
ApplicationContext applicationContext;
public void publish(DemoEvent demoEvent) {
applicationContext.publishEvent(demoEvent);
}
}
3、创建监听者(当监听到消息时,执行相关业务逻辑,使用异步)
@Component
public class DemoListener implements ApplicationListener<DemoEvent> {
@Override
@Async//异步处理
public void onApplicationEvent(DemoEvent demoEvent) {
System.out.println("接收到publisher发送到消息,时间" +System.currentTimeMillis());
String data = demoEvent.getData();
try {
Thread.sleep(5000);//使用休眠方式,模拟业务逻辑,可以看出是异步的
}catch (Exception e) {
e.printStackTrace();
}
System.out.println("消息内容:" + data);
}
}
4、在启动类中开启异步处理
@EnableAsync //开启异步
@ServletComponentScan("com.ct.underwriting.filter")
@MapperScan("com.ct.underwriting.dao")
@SpringBootApplication
public class UnderwritingApplication {
public static void main(String[] args) {
SpringApplication.run(UnderwritingApplication.class, args);
}
}
5、创建一个controller发布消息
@Controller
@RequestMapping("/test")
public class TestController {
@Autowired
private DemoPublisher publisher;
@RequestMapping("/test")
@ResponseBody
public String testListener() {
publisher.publish(new DemoEvent("测试","测试"));
return "消息发布成功";
}
}