所以一开始我添加了一个属性文件:
spring.data.mongodb.uri = mongodb的://轴突:轴突@ aurl:27017 / axonframework
哪个有效,但我被迫使用axonframework作为db名称,因为它是我在mongo db中创建的。
现在控制数据库名称和其他细节在这种情况下不是一个选项,所以我去检查并发现以下内容:
@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客户端实例的弹簧配置,因为mongo的使用只是对轴突框架的扩展。
AFAIK就是这样
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 Framework版本4.x或Axon Mongo Extension版本4.x不符。从版本3到4的转变几乎取代了基础架构组件的所有构造函数,转而支持Builder模式。
因此,你不应该做new MongoEventStorageEngine(...)
,而应该做:
MongoEventStorageEngine.builder().mongoTemplate(axonMongoTemplate).build()
如果您仍然可以使用构造函数,我假设您仍然在类路径上的某个位置安装了Axon 3!
关于Mongo细节,顺便说一下,我会相信@ PolishCivil的声明。
希望这可以帮助!