I have the following file :
spring:
data:
mongodb:
uri: <url>
database: <database>
I have created my Mongo Config File :
@Configuration
@EnableMongoRepositories
public class MongoConfig extends AbstractMongoClientConfiguration {
@Value("${spring.data.mongodb.database}")
private String databaseName;
@Value("${spring.data.mongodb.uri}")
private String mongoUri;
@Bean
MongoTransactionManager transactionManager(MongoDatabaseFactory dbFactory) {
return new MongoTransactionManager(dbFactory);
}
@Override
protected String getDatabaseName() {
return databaseName;
}
@Override
public MongoClient mongoClient() {
final ConnectionString connectionString = new ConnectionString(mongoUri);
final MongoClientSettings mongoClientSettings = MongoClientSettings.builder()
.applyConnectionString(connectionString)
.build();
return MongoClients.create(mongoClientSettings);
}
@Bean
public MongoTemplate mongoTemplate() throws Exception {
return new MongoTemplate(mongoDbFactory());
}
@Bean
public MongoDatabaseFactory mongoDbFactory() {
return new SimpleMongoClientDatabaseFactory(mongoClient(), getDatabaseName());
}
@PostConstruct
public void init() {
System.out.println("MongoConfig initialized with database: " + databaseName);
}
}
Currently the bean was not getting picked by spring application as Spring Boot applying its default MongoDB auto-configuration.
So i added the following line of code :
@SpringBootApplication(exclude = {MongoAutoConfiguration.class, MongoDataAutoConfiguration.class})
Now i am getting the error required a bean named 'mongoTemplate' that could not be found.
- How to enable the transactionManager for mongo db ? as by defaults it’s no there that’s why i have create my own class.