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 "消息发布成功";
    }

}
posted on 2019-12-24 11:31  lazyli  阅读(1950)  评论(0编辑  收藏  举报