如何在轴心框架的Java中不使用Spring的情况下配置处理命令和调度事件的聚合类?

时间:2019-09-02 05:10:09

标签: java event-sourcing axon

我想使用轴突框架在Java中不使用spring的情况下设置处理命令并调度事件的聚合类。我已经在Spring Boot中使用@ Aggregate,@ CommandHandler之类的注释执行了该操作,但是如果没有spring则无法执行。

我使用了默认配置器对象和命令总线对象。我能够分派命令并在自定义处理程序中处理它,但我想在聚合中处理它并分派事件并在聚合中处理该事件。我知道在春季启动中启用了注释。

@Aggregate
public class PlayerAggregate{

    @AggregateIdentifier
    private String playerId;

    public PlayerAggregate() {
    }

    @CommandHandler
    public PlayerAggregate(CreatePlayerCommand createPlayerCommand){
        AggregateLifecycle.apply(new PlayerCreatedEvent(createPlayerCommand.playerId ));
    }

    @EventSourcingHandler
    protected void on(PlayerCreatedEvent playerCreatedEvent){
        this.playerId = playerCreatedEvent.playerId;
        System.out.println("event completed");
    }
}

1 个答案:

答案 0 :(得分:2)

您根本不需要使用Spring。

为了进行基础结构组件的配置并定义它们与每个功能组件的关系,Axon提供了Java Configuration API。

 /* Axon configuration */
    Configuration config = DefaultConfigurer.defaultConfiguration()
            .configureAggregate(GiftCard.class)
            // .configureEmbeddedEventStore(c -> new InMemoryEventStorageEngine())
            .eventProcessing(ep -> ep.registerEventHandler(c -> new GiftCardEventHandler(c.queryUpdateEmitter(), querySideDBMap)))
            .registerQueryHandler(c -> new GiftCardQueryHandler(querySideDBMap))
            .start();

在此处查看完整的示例/演示项目:https://github.com/idugalic/axon-vanilla-java-demo