我的Aggregate
礼品卡的定义如下,
@Data
@NoArgsConstructor
@Aggregate
public class GiftCard {
@AggregateIdentifier
private String id;
private int remainingValue;
@CommandHandler
public GiftCard(IssueCardCommand cmd) {
apply(new CardIssuedEvent(cmd.getCardId(), cmd.getAmount()));
}
@CommandHandler
public GiftCard(TempCommand cmd) {
apply(new CardIssuedEvent(cmd.getCardId(), cmd.getAmount()));
}
@EventSourcingHandler
public void on(CardIssuedEvent event) {
this.id = event.getCardId();
this.remainingValue = event.getAmount();
}
}
然后我从控制器调度IssueCardCommand
。
public String createGreeting(@PathVariable String cardNumber) {
IssueCardCommand issueCardCommand = new IssueCardCommand(cardNumber, 100);
commandGateway.sendAndWait(issueCardCommand, 500L, TimeUnit.MILLISECONDS);
return "Hey";
}
我可以通过查看AxonServer中的http://localhost:8024/#query
来确认事件是否已分发。
我想进行EventSourcing,并设置了内存中的H2数据库。
compile group: 'org.projectlombok', name: 'lombok', version: '1.18.6'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.1.3.RELEASE'
implementation 'org.axonframework:axon:4.1.1'
implementation 'org.axonframework:axon-spring-boot-starter:4.1.1'
testCompile group: 'junit', name: 'junit', version: '4.12'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.1.4.RELEASE'
runtime group: 'com.h2database', name: 'h2', version: '1.4.199'
当我在调度事件后查看h2-console时,无法在数据库中找到该事件。写了许多文章说,它将存储在DOMAIN_EVENT_ENTRY
表中。不幸的是,就我而言,我无法找到该表。我只能看到ASSOCIATION_VALUE_ENTRY
,SAGA_ENTRY
,TOKEN_ENTRY
这3个表格。
这是我的设置的样子。命令和事件是出于学习/实践目的而编写的(此时您可以忽略业务背景和最佳实践)
答案 0 :(得分:2)
该项目最近进行了更新,仅在实际使用时才创建这些表。如果您不将EmbeddedEventStore
与JPAStorageEngine
一起使用,则不会创建这些表。
在您的设置中,您似乎正在使用AxonServer(这是默认设置,除非您排除axon-server-connector
依赖项)。在这种情况下,事件存储在AxonServer中。
所以您看到的是正确的预期行为。