在 spring 启动时为 Axon 框架设置 Mongo 扩展

Setting up Mongo Extension for Axon Framework on spring boot

所以一开始我添加了一个属性文件:

spring.data.mongodb.uri=mongodb://axon:axon@aurl:27017/axonframework

这有效,但我被迫使用 axonframework 作为数据库名称,因为它是在我的 mongo 数据库中创建的。

现在控制数据库名称和其他详细信息在这种情况下不是一个选项,所以我四处检查并发现以下内容:

@configuration
public class AxonConfiguration {

    @Value("${mongo.host:127.0.0.1}")
    private String mongoHost;

    @Value("${mongo.port:27017}")
    private int mongoPort;

    @Value("${mongo.db:test}")
    private String mongoDB;

    @Bean
    public MongoSagaStore sagaStore() {
        return new MongoSagaStore(axonMongoTemplate());
    }

    @Bean
    public TokenStore tokenStore(Serializer serializer) {
        return new MongoTokenStore(axonMongoTemplate(), serializer);
    }

    @Bean
    public EventStorageEngine eventStorageEngine(Serializer serializer) {
        return new MongoEventStorageEngine(serializer, null, axonMongoTemplate(), new DocumentPerEventStorageStrategy());
    }

    @Bean
    public MongoTemplate axonMongoTemplate() {
        return new DefaultMongoTemplate(mongo(), mongoDB);
    }

    @Bean
    public MongoClient mongo() {
        MongoFactory mongoFactory = new MongoFactory();
        mongoFactory.setMongoAddresses(Collections.singletonList(new ServerAddress(mongoHost, mongoPort)));
        return mongoFactory.createMongo();
    }
}

现在显然这对人们有用,但我无法正确设置用户名和密码?

我正在使用 axon 4.1,axonframework.extensions.mongo 4.1

这个问题与轴突本身并没有真正的关系,但更可能与 mongo 客户端实例的 spring 配置有关,因为 mongo 的使用只是对 mongo 的扩展轴突框架。

据我所知是

spring.data.mongodb.passwordspring.data.mongodb.username

您还应该考虑更改代码中的一件事

return new DefaultMongoTemplate(mongo(), mongoDB);

您调用指定为 bean 的方法,因此在 spring 中您应该像这样将它连接到您的方法参数:

 public MongoTemplate axonMongoTemplate(MongoClient client) {
     return new DefaultMongoTemplate(client, mongoDB);
 }

您分享的代码片段与 Axon 框架版本 4.x 或 Axon Mongo 扩展版本 4.x 不对应。从版本 3 到版本 4 的转变已经替换了几乎所有基础设施组件的构造函数,以支持构建器模式。

因此,您不应该能够做到 new MongoEventStorageEngine(...),而应该做到:

MongoEventStorageEngine.builder().mongoTemplate(axonMongoTemplate).build()

如果您仍然能够使用构造函数,我假设您在 class 路径的某处仍然有 Axon 3!

关于 Mongo 细节,顺便说一句,我相信@PolishCivil 的说法。

希望对您有所帮助!