I use MongoDB extension
package org.isc.axon.framworkcore.config;
import com.mongodb.MongoClientSettings;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import org.axonframework.common.transaction.TransactionManager;
import org.axonframework.eventsourcing.eventstore.EmbeddedEventStore;
import org.axonframework.eventsourcing.eventstore.EventStorageEngine;
import org.axonframework.eventsourcing.eventstore.EventStore;
import org.axonframework.extensions.mongo.MongoTemplate;
import org.axonframework.extensions.mongo.eventsourcing.eventstore.MongoEventStorageEngine;
import org.axonframework.extensions.mongo.spring.SpringMongoTemplate;
import org.axonframework.extensions.mongo.springboot.AxonMongoProperties;
import org.axonframework.extensions.mongo.springboot.autoconfig.MongoAutoConfiguration;
import org.axonframework.extensions.mongo.springboot.autoconfig.MongoDeadLetterProviderAutoConfiguration;
import org.axonframework.serialization.xml.XStreamSerializer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.AutoConfigureAfter;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration;
import org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.MongoDatabaseFactory;
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
import static java.util.Collections.singletonList;
import static java.util.Objects.isNull;
;
/**
- @Author: Z_Rashidi
- Date : 10/9/2023
*/
@ConditionalOnProperty(prefix = “isc.axon.mongodb”,havingValue =“true” ,name = “enable”,matchIfMissing = false)
@Configuration
@EnableConfigurationProperties(PropertiesISC.class)
@AutoConfigureAfter( { KafkaAutoConfiguration.class,
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class,
MongoDeadLetterProviderAutoConfiguration.class})
public class ConfigMongo {
/**
- @param storageEngine
- */
@Bean
public EventStore eventStore(EventStorageEngine storageEngine
) {
return EmbeddedEventStore.builder()
.storageEngine(storageEngine)
// .messageMonitor(metricRegistry.registerEventBus("eventStore"))
//.spanFactory(spanFactory)
.build();
}
/**
-
The MongoEventStorageEngine stores each event in a separate MongoDB document.
-
@param factory
-
@param transactionManager
-
*/
@Bean
public EventStorageEngine storageEngine(MongoDatabaseFactory factory,
TransactionManager transactionManager) {
return MongoEventStorageEngine.builder()
.mongoTemplate(mongoTemplate(factory).builder()
.factory(factory)
.build())
.eventSerializer(
XStreamSerializer.builder()
.xStream(SecureXStreamSerializer.get().getXStream())
.build()) .snapshotSerializer( XStreamSerializer.builder() .xStream(SecureXStreamSerializer.get().getXStream()) .build() ) .transactionManager(transactionManager) .build();
}
// @Autowired
// MongoTemplate template;
//
// @Bean
// @ConditionalOnMissingBean
// public MongoTemplate mongoTemplate() throws Exception {
// return new MongoTemplate(mongoClient(secondaryProperties()), “axonframework”);
// }
@Bean
@ConditionalOnMissingBean
public SpringMongoTemplate mongoTemplate(MongoDatabaseFactory factory) {
AxonMongoProperties axonMongoProperties= new AxonMongoProperties();
String databaseName = axonMongoProperties.getDatabaseName();
databaseName=“axonframework”;
System.out.println("**************** "+databaseName);
if (isNull(databaseName)) {
return SpringMongoTemplate.builder()
.factory(factory)
.build();
} else {
return SpringMongoTemplate.builder()
.factory(factory)
.databaseName(databaseName)
.build();
}
}
@Value("${spring.data.mongodb.uri}")
String databaseUrl;
@Autowired
MongoClient mongoClients;
@Bean
@ConditionalOnMissingBean
public MongoDatabaseFactory mongoDatabaseFactory(){
return new SimpleMongoClientDatabaseFactory(mongoClients,"axonframework");
}
//
//
@ConfigurationProperties(prefix = “spring.data.mongodb”)
@ConditionalOnMissingBean
@Bean
public MongoProperties secondaryProperties() {
return new MongoProperties();
}
@ConditionalOnMissingBean
@Bean
public MongoClient mongoClient(MongoProperties mongoProperties) {
// MongoCredential credential = MongoCredential
// .createCredential(mongoProperties.getUsername(), mongoProperties.getAuthenticationDatabase(), mongoProperties.getPassword());
return MongoClients.create(MongoClientSettings.builder()
.applyToClusterSettings(builder -> builder
.hosts(singletonList(new ServerAddress(mongoProperties.getHost(), mongoProperties.getPort()))))
//.credential(credential)
.build());
}
}
get this error when we use public interface AccountRepository extends MongoRepository<Account, String>
Caused by: java.lang.IllegalStateException: Cannot convert value of type ‘org.axonframework.extensions.mongo.spring.SpringMongoTemplate’ to required type ‘org.springframework.data.mongodb.core.MongoOperations’ for property ‘mongoOperations’: no matching editors or conversion strategy found