MOngoDB Spring Data Driver
Table of Contents
# Introduction
This sections covers the Mongock implementation for Spring Data MongoDB 2.x and 3.x
# MongoDB driver options and compatibility
| Mongock driver | Driver library | Version compatibility | 
|---|---|---|
| mongodb-springdata-v3-driver | org.springframework.data:spring-data-mongodb | 3.X.X | 
| mongodb-springdata-v2-driver | org.springframework.data:spring-data-mongodb | 2.X.X | 
# MongoDB common configuration
All the MongoDB drivers share the same configuration.
When setting configuration via properties file, it must be prefixed by mongock.mongo-db
# Properties
| Property | Description | Type | Default value | 
|---|---|---|---|
| writeConcern | Exactly the same MongoDB parameter write concern. For more information, visit the official MongoDB documentation for write concern. | Object | {w: majority,wTimeoutMs: null, j:true} | 
| readConcern | Exactly the same MongoDB parameter read concern. For more information, visit the official MongoDB documentation for read concern. | String | majority | 
| readPreference | Exactly the same MongoDB parameter read preference. For more information, visit the official MongoDB documentation for read preference. | String | primary | 
# Get started
Following the get started section, this covers steps 3 and 5 and 6.
# - Add maven dependency for the driver (step 2)
<dependency>  <groupId>io.mongock</groupId>  <artifactId>mongodb-springdata-v3-driver</artifactId>  <!--<artifactId>mongodb-springdata-v2-driver</artifactId> for MongoDB spring data v2--></dependency># - Build the driver (step 5)
This step is only required for builder approach. Mongock handles it for autoconfiguration.
These classes provide the same two static initializers:
- withDefaultLock(mongoTemplate)
- withLockStrategy(mongoTemplate, lockAcquiredForMillis, lockQuitTryingAfterMillis, lockTryFrequencyMillis)
// For mongodb-springdata-v3-driverSpringDataMongoV3Driver driver = SpringDataMongoV3Driver.withDefaultLock(mongoTemplate);// For mongodb-springdata-v2-driver//SpringDataMongoV2Driver driver = SpringDataMongoV2Driver.withDefaultLock(mongoTemplate);driver.setWriteConcern(WriteConcern.MAJORITY.withJournal(true).withWTimeout(1000, TimeUnit.MILLISECONDS));driver.setReadConcern(ReadConcern.MAJORITY);driver.setReadPreference(ReadPreference.primary());driver.enableTransaction();# - Driver extra configuration (step 6)
# Transactions
In order to use MongoDB transactions, we need to enable transactions in Mongock(this won't be required in next versions as transactions will be enabled by default).
With builder
driver.enableTransaction();Properties
mongock.transactional=trueKeep in mind that your MongoDB database must allow multi-document ACID transactions
# Example autoconfiguration with Springboot
mongock:  mongo-db:    write-concern:      w: majority      wTimeoutMs: 1000      journal: true    read-concern: majority    read-preference: primary@EnableMongock@SpringBootApplicationpublic class QuickStartApp {    /**     * Be warned MongoTemplate needs to be injected     */    public static void main(String[] args) {        SpringApplicationBuilder().sources(QuickStartApp.class)().run(args);    }}# Examples
Please visit our example github repository for more information
