要解决这个问题,可以使用ThreadLocal来保存私有属性。ThreadLocal是一个线程本地变量,可以在一个线程中共享数据,但是在不同的线程中是互相独立的。
下面是一个示例代码,演示如何使用ThreadLocal来保存私有属性:
public class AxonSaga {
private static ThreadLocal privateAttribute = new ThreadLocal<>();
@SagaEventHandler(associationProperty = "sagaId")
public void handleEvent(Event event) {
// 获取私有属性
String attribute = privateAttribute.get();
// 处理事件
// ...
// 更新私有属性
privateAttribute.set("new value");
}
}
在上面的代码中,我们使用ThreadLocal来创建一个私有属性privateAttribute。在handleEvent方法中,我们可以通过privateAttribute.get()来获取私有属性的值,并在处理事件后使用privateAttribute.set()来更新私有属性的值。
需要注意的是,由于ThreadLocal是线程本地变量,所以在不同的线程中私有属性的值是独立的。在Axon Saga中,每个事件处理都会在一个新的线程中执行,所以每个线程都会有自己的私有属性。
这样就可以在Axon Saga的@SagaEventHandler方法之间保留私有属性了。