You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Axon的Spring Boot微服务@EventHandler不触发事件无法落库问题

问题根因与解决方案

根因

你遇到的问题直接由日志中抛出的com.thoughtworks.xstream.security.ForbiddenClassException导致:
Axon框架默认使用XStream作为事件序列化/反序列化工具,1.4.18及以上版本的XStream新增了严格的安全校验规则,默认禁止反序列化未加入白名单的自定义业务类。事件从事件存储取出后反序列化失败,跟踪事件处理器直接进入重试模式,根本不会触发你编写的@EventHandler方法,因此无法将数据持久化到实体表。

解决方案

方案1:配置XStream类白名单

你可以通过配置将你的事件所在包加入XStream的允许反序列化列表,两种配置方式二选一即可:

配置文件方式

在application.properties或application.yml中添加如下配置:

axon.serializer.xstream.allow-types=com.solinvictus.Products.CQRS.events.**

代码配置方式

新增Axon配置类自定义XStream实例:

@Configuration
public class AxonXstreamConfig {
    @Bean
    public XStream xStream() {
        XStream xStream = new XStream();
        // 按包路径配置白名单,支持通配符
        xStream.allowTypesByWildcard(new String[] {
            "com.solinvictus.Products.CQRS.events.**",
            // 后续新增的事件、命令类所在包也可以加在这里
        });
        return xStream;
    }
}

方案2:更换为Jackson序列化器

也可以直接将Axon的默认序列化器更换为Jackson,从根源上避免XStream的安全限制问题,在配置文件中添加如下配置即可:

axon:
  serializer:
    general: jackson
    events: jackson
    messages: jackson

注意更换序列化器后,你的事件类需要添加无参构造方法,保证Jackson可以正常反序列化。

额外排查点

如果配置完成后还存在问题,可以检查以下两点:

  • 确认ProductEventsHandler类所在的包在Spring Boot的扫描路径下,@Service注解正常生效,该类被正确实例化到Spring容器中
  • 确认@EventHandler注解导入的是org.axonframework.eventhandling.EventHandler包,没有误导入其他框架的同名注解

内容的提问来源于stack exchange,提问作者Aayush Sahu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 06:06:03