Настройка расширения Mongo для Axon Framework при весенней загрузке

Итак, сначала я добавил файл свойств с:

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


person Ali_Nass    schedule 02.04.2019    source источник
comment
Решил ли какой-нибудь из ответов вашу проблему @bleh10? Было бы полезно для других читателей, если бы вы могли поделиться своим курсом действий или если бы один из ответов решил вашу проблему.   -  person Steven    schedule 17.10.2019


Ответы (2)


Фрагмент кода, которым вы делитесь, не соответствует Axon Framework версии 4.x или расширению Axon Mongo версии 4.x. Переход с версии 3 на 4 заменил почти все конструкторы компонентов инфраструктуры в пользу шаблона Builder.

Таким образом, вы не сможете сделать new MongoEventStorageEngine(...), а вместо этого должны сделать:

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

Если вы все еще можете использовать конструктор, я предполагаю, что у вас все еще есть Axon 3 где-то на пути к классу!

Кстати, что касается специфики Mongo, я бы поверил заявлению @PolishCivil.

Надеюсь это поможет!

person Steven    schedule 12.04.2019

Эта проблема на самом деле не связана с самим аксоном, а скорее с конфигурацией spring экземпляра клиента mongo, поскольку использование mongo — это просто расширение по сравнению с инфраструктурой аксона.

насколько я знаю

spring.data.mongodb.password и spring.data.mongodb.username

Также в коде есть одна вещь, которую вы должны изменить

return new DefaultMongoTemplate(mongo(), mongoDB);

Вы вызываете метод, указанный как bean-компонент, поэтому вместо этого весной вы должны просто подключить его к параметру вашего метода следующим образом:

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

person PolishCivil    schedule 05.04.2019
comment
Не уверен, что я не понял вас или наоборот, поэтому вы говорите, что для ссылки на имя пользователя и пароль мне нужны spring.data.mongodb.password и spring.data.mongodb.username в моем файле application.properties? Потому что если это так, то это не то, о чем я прошу, в моем spring.data.mongodb.uri у меня есть все, что мне нужно (url, порт, имя пользователя, пароль...), но я хочу поместить конфигурацию в класс конфигурации, поэтому Я спрашиваю, как сделать поле @value для имени пользователя и пройти - person Ali_Nass; 08.04.2019