在 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.password
和
spring.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 的说法。
希望对您有所帮助!
所以一开始我添加了一个属性文件:
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.password
和
spring.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 的说法。
希望对您有所帮助!