侧边栏壁纸
博主头像
落叶人生博主等级

走进秋风,寻找秋天的落叶

  • 累计撰写 130557 篇文章
  • 累计创建 28 个标签
  • 累计收到 9 条评论
标签搜索

目 录CONTENT

文章目录

Spring event 使用完全指南

2023-12-14 星期四 / 0 评论 / 0 点赞 / 18 阅读 / 4295 字

说明此篇文章以 Spring 4.2+ 为例,在此版本之前略微有不同。笔者自2014年起开始接触和使用 Spring event,根据 Spring event 的原理开发了 JFinal-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 创建,完成不同的业务逻辑。

/** * 账号监听,处理账号创建成功的后续逻辑 */@Componentpublic 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 */@Autowiredprivate ApplicationEventPublisher publisher;@Overridepublic boolean save(Account account) {	// 伪代码,数据库保存成功	if (true) {		publisher.publishEvent(new AccountCreatedEvent(account));	}	return false;}

idea 中的快捷跳转按钮

@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 为异步线程池的配置。

异步配置项

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

关注我们

扫描上面二维码,更多精彩内容每天推荐!

广告 广告

评论区