(该事件创建一个新的Webshop,并将其余额设置为100)。该事件将持久化到我的数据库中。当我查询当前webshop余额时,我可以返回当前余额为100。(事件和查询的代码如下所示)
但是,如果我重新启动应用程序,并试图再次查询当前余额,以前的事件不会被重播,因此我无法获得当前余额(重新启动后,事件仍然存在于数据库中,因此我认为这只是框架没有检索所有以前的事件的问题)。
我目前使用缺省配置,Axon 4.0.3 for Spring和将事件存储到本地文件的H2数据库(我知道H2不是最好的选择,但这只是为了一个小的概念验证,显示事件源和CQRS,所以不需要大的和可伸缩的)。
@Service
@NoArgsConstructor
public class WebshopsEventHandler {
private final Map<String, Webshop> webshops = new HashMap<>();
// ... some other unrelated code
@EventSourcingHandler
public void on(ShopCreatedEvent shopCreatedEvent) {
this.webshops.put(
shopCreatedEvent.getId(),
new Webshop(
shopCreatedEvent.getId(),
shopCreatedEvent.getName(),
shopCreatedEvent.getBalance() // Balance is 100 as default
)
);
}
// ... some more unrelated code
@QueryHandler
protected Optional handle(GetCurrentBalanceQuery getCurrentBalanceQuery) {
System.out.println("Balance query");
if (webshops.containsKey(getCurrentBalanceQuery.getShopId())) {
return Optional.of(webshops.get(getCurrentBalanceQuery.getShopId()).getBalance());
} else {
return Optional.empty();
}
}
}
如何配置Axon 4以在重新启动后检索以前的所有事件?
我想在这种情况下我能帮你。让我首先给出一些背景知识,说明为什么每次启动时没有填充“查询模型存储”,即私有最终映射
。
向@EventHandler
注释函数提供事件的技术机制称为事件处理器。在4.0版本之外,Axon Framework默认为TrackingEventProcessor
。
正如名称所示,TrackingEventProcessor
跟踪自己的事件处理。它通过存储trackingtoken
-在您的设置中,这意味着它将存储在H2数据库文件中。此TrackingToken
存储(除其他外)给定TrackingEventProcessor
处理的最后一个事件。
您可以通过在TrackingEventProcessor
上启动重播来实现这一点,这里将对此进行详细说明。然而,由于您只是展示它是如何工作的,而不是创建一个持久的系统,所以我建议一些更务实的方法。
如果将tokenstore
(负责存储令牌的组件)调整为inmemorytokenstore
,那么您的应用程序将不会在应用程序关闭之间跟踪事件处理器的进度。为此,您可以在配置文件或@springbootapplication
注释类中执行以下操作(假设您使用的是Spring Boot):
@Autowired
public void configureInMemoryTokenStore(EventProcessingConfigurer configurer) {
configurer.registerTokenStore(configuration -> new InMemoryTokenStore());
}
希望这能有所帮助!
在我的应用程序中,我需要使用两个MongoDB数据库。我不知道如何在应用程序中添加2个MongoDB数据库。spring应用程序中的属性文件。 这是申请表。我的项目的属性文件, 但是我想为同一个项目使用另一个MongoDB数据库。如何在应用程序中添加新数据库。属性文件。
Spring Boot版本为1.5.6 使用的数据库是SQL Server2016,它也是在docker(windows容器)上。 问题:每当我重新启动SQL DB容器时,应用程序开始给出这个错误。 任何想法可以做什么来解决这个问题。 多谢了。
我正在用spring boot开发一个应用程序。我使用Mysql数据库来实现持久性。我的数据库在远程服务器上。如何为远程数据库连接配置数据源? 请帮助我在属性文件和数据源bean配置中使用我的配置类中的注释来配置它。
根据文档,来自的room实例应该保存的数据是persist。但还是迷路了。我的项目必须数据库 第一个数据库 @database(实体=[foodmodel::class],version=4,exportSchema=false)抽象类FoodDatabase:RoomDatabase(){ 第二数据库 抽象类MyFoodDatabase:RoomDatabase(){abstract val M
请让我知道如何使用spring boot和ehcache实现这一点。
我想在应用程序启动时使用Spring ehCache将数据从数据库加载到缓存中,即在调用任何其他方法之前服务器启动时。我不想使用构造函数。请帮帮我。