Spring event 使用完全指南

说明

此篇文章以 Spring 4.2+ 为例,在此版本之前略微有不同。
笔者自2014年起开始接触和使用 Spring event,根据 Spring event 的原理开发了 JFinal-event: https://gitee.com/596392912/JFinal-event ,方便 JFinal 用户使用,JFinal event 2.x 也同步成 Spring 4.2.x+ 的使用方式,不再需要创建多个 Listener 类,使用更加简单方便。

使用

创建 Event 事件监听

Spring 4.2+ 中不再需要单独编写监听器类,只需要在 Spring Bean 的方法上标记 @EventListener 注解即可。

示例:多个监听器,监听 Account 创建,完成不同的业务逻辑。

/**
 * 账号监听,处理账号创建成功的后续逻辑
 */
@Component
public class AccountListener {

    /**
     * 1. 发送邮件、短信
     */
    @EventListener
    public void processAccountCreatedEvent1(AccountCreatedEvent event) {
        // TODO
    }

    /**
     * 2. 添加积分等,@Order(100) 用来设定执行顺序
     */
    @EventListener
    @Order(100)
    public void processAccountCreatedEvent2(AccountCreatedEvent event) {
        // TODO
    }

    /**
     * 3. 创建 lucene 索引等,@Async 用来标记为异步线程池中执行
     */
    @EventListener
    @Async
    public void processAccountCreatedEvent3(AccountCreatedEvent event) {
        // TODO
    }
}

发送 Event 事件

示例:mybatis中发送账号创建事件。

注意:如果你是使用的 jpa,jpa 也有对应的事件机制,不需要像下面手动处理。

/**
 * 注入 ApplicationEventPublisher
 */
@Autowired
private ApplicationEventPublisher publisher;

@Override
public boolean save(Account account) {
    // 伪代码,数据库保存成功
    if (true) {
        publisher.publishEvent(new AccountCreatedEvent(account));
    }
    return false;
}

idea 中的快捷跳转按钮

spring-event.mp4.gif

@EventListener 注解属性说明

@EventListener(value = {AccountCreatedEvent.class, AccountUpdatedEvent.class}, condition = "#event.account.age > 10")
public void processAccountCreatedEvent2(AccountEvent event) {
    // TODO
}
  • valueclasses 作用相同,表示监听的一个或一组事件,用于支持方法中同一个父类的事件,例如 AccountEvent;
  • condition 表达式,支持 Spring el,用来做 event 中的变量或者方法判断。

监听执行顺序

可以使用 @Order(100) 注解来标记事件的监听执行顺序,异步的情况下只保证按顺序将监听器丢入进线程池,具体执行得看线程的心情 -.-

监听异步执行

使用 @Async 标记即可,注意前提条件是:使用 @EnableAsync 开启 Spring 异步。

Spring boot 配置异步

本节以 mica 中的异步配置为基础讲解。

异步配置

  • @EnableAsync 开启异步。
  • @EnableScheduling 开启定时任务。
  • MicaAsyncProperties 为异步线程池的配置。

QQ20190409-164911@2x.png

异步配置项

QQ20190409-164945@2x.png

配置项 默认值 说明
mica.async.core-pool-size 2 异步核心线程数,默认:2
mica.async.keep-alive-seconds 300 线程存活时间,默认:300
mica.async.max-pool-size 50 异步最大线程数,默认:50
mica.async.queue-capacity 10000 队列容量,默认:10000

精品开源推荐

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/697657

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Apache Tomcat7、8、9(Java Web服务器)

Apache Tomcat7、8、9(Java Web服务器)

Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。