11package com .github .mongobee ;
22
3+ import static com .mongodb .ServerAddress .defaultHost ;
4+ import static com .mongodb .ServerAddress .defaultPort ;
5+ import static org .springframework .util .StringUtils .hasText ;
6+
7+ import java .lang .reflect .InvocationTargetException ;
8+ import java .lang .reflect .Method ;
9+ import java .util .List ;
10+
11+ import org .jongo .Jongo ;
12+ import org .slf4j .Logger ;
13+ import org .slf4j .LoggerFactory ;
14+ import org .springframework .beans .factory .InitializingBean ;
15+ import org .springframework .core .env .Environment ;
16+ import org .springframework .data .mongodb .core .MongoTemplate ;
17+
318import com .github .mongobee .changeset .ChangeEntry ;
419import com .github .mongobee .dao .ChangeEntryDao ;
520import com .github .mongobee .exception .MongobeeChangeSetException ;
1126import com .mongodb .MongoClient ;
1227import com .mongodb .MongoClientURI ;
1328import com .mongodb .client .MongoDatabase ;
14- import org .jongo .Jongo ;
15- import org .slf4j .Logger ;
16- import org .slf4j .LoggerFactory ;
17- import org .springframework .beans .factory .InitializingBean ;
18- import org .springframework .core .env .Environment ;
19- import org .springframework .data .mongodb .core .MongoTemplate ;
20-
21- import java .lang .reflect .InvocationTargetException ;
22- import java .lang .reflect .Method ;
23- import java .util .List ;
24-
25- import static com .mongodb .ServerAddress .defaultHost ;
26- import static com .mongodb .ServerAddress .defaultPort ;
27- import static org .springframework .util .StringUtils .hasText ;
2829
2930/**
3031 * Mongobee runner
@@ -37,6 +38,10 @@ public class Mongobee implements InitializingBean {
3738
3839 private static final String DEFAULT_CHANGELOG_COLLECTION_NAME = "dbchangelog" ;
3940 private static final String DEFAULT_LOCK_COLLECTION_NAME = "mongobeelock" ;
41+ private static final boolean DEFAULT_WAIT_FOR_LOCK = false ;
42+ private static final long DEFAULT_CHANGE_LOG_LOCK_WAIT_TIME = 5L ;
43+ private static final long DEFAULT_CHANGE_LOG_LOCK_POLL_RATE = 10L ;
44+ private static final boolean DEFAULT_THROW_EXCEPTION_IF_CANNOT_OBTAIN_LOCK = false ;
4045
4146 private ChangeEntryDao dao ;
4247
@@ -71,7 +76,8 @@ public Mongobee() {
7176 public Mongobee (MongoClientURI mongoClientURI ) {
7277 this .mongoClientURI = mongoClientURI ;
7378 this .setDbName (mongoClientURI .getDatabase ());
74- this .dao = new ChangeEntryDao (DEFAULT_CHANGELOG_COLLECTION_NAME , DEFAULT_LOCK_COLLECTION_NAME );
79+ this .dao = new ChangeEntryDao (DEFAULT_CHANGELOG_COLLECTION_NAME , DEFAULT_LOCK_COLLECTION_NAME , DEFAULT_WAIT_FOR_LOCK ,
80+ DEFAULT_CHANGE_LOG_LOCK_WAIT_TIME , DEFAULT_CHANGE_LOG_LOCK_POLL_RATE , DEFAULT_THROW_EXCEPTION_IF_CANNOT_OBTAIN_LOCK );
7581 }
7682
7783 /**
@@ -84,7 +90,8 @@ public Mongobee(MongoClientURI mongoClientURI) {
8490 */
8591 public Mongobee (MongoClient mongoClient ) {
8692 this .mongoClient = mongoClient ;
87- this .dao = new ChangeEntryDao (DEFAULT_CHANGELOG_COLLECTION_NAME , DEFAULT_LOCK_COLLECTION_NAME );
93+ this .dao = new ChangeEntryDao (DEFAULT_CHANGELOG_COLLECTION_NAME , DEFAULT_LOCK_COLLECTION_NAME , DEFAULT_WAIT_FOR_LOCK ,
94+ DEFAULT_CHANGE_LOG_LOCK_WAIT_TIME , DEFAULT_CHANGE_LOG_LOCK_POLL_RATE , DEFAULT_THROW_EXCEPTION_IF_CANNOT_OBTAIN_LOCK );
8895 }
8996
9097 /**
@@ -311,6 +318,50 @@ public Mongobee setEnabled(boolean enabled) {
311318 return this ;
312319 }
313320
321+ /**
322+ * Feature which enables/disables waiting for lock if it's already obtained
323+ *
324+ * @param waitForLock Mongobee will be waiting for lock if it's already obtained if this option is set to true
325+ * @return Mongobee object for fluent interface
326+ */
327+ public Mongobee setWaitForLock (boolean waitForLock ) {
328+ this .dao .setWaitForLock (waitForLock );
329+ return this ;
330+ }
331+
332+ /**
333+ * Waiting time for acquiring lock if waitForLock is true
334+ *
335+ * @param changeLogLockWaitTime Waiting time in minutes for acquiring lock
336+ * @return Mongobee object for fluent interface
337+ */
338+ public Mongobee setChangeLogLockWaitTime (long changeLogLockWaitTime ) {
339+ this .dao .setChangeLogLockWaitTime (changeLogLockWaitTime );
340+ return this ;
341+ }
342+
343+ /**
344+ * Poll rate for acquiring lock if waitForLock is true
345+ *
346+ * @param changeLogLockPollRate Poll rate in seconds for acquiring lock
347+ * @return Mongobee object for fluent interface
348+ */
349+ public Mongobee setChangeLogLockPollRate (long changeLogLockPollRate ) {
350+ this .dao .setChangeLogLockPollRate (changeLogLockPollRate );
351+ return this ;
352+ }
353+
354+ /**
355+ * Feature which enables/disables throwing MongobeeLockException if Mongobee can not obtain lock
356+ *
357+ * @param throwExceptionIfCannotObtainLock Mongobee will throw MongobeeLockException if lock can not be obtained
358+ * @return Mongobee object for fluent interface
359+ */
360+ public Mongobee setThrowExceptionIfCannotObtainLock (boolean throwExceptionIfCannotObtainLock ) {
361+ this .dao .setThrowExceptionIfCannotObtainLock (throwExceptionIfCannotObtainLock );
362+ return this ;
363+ }
364+
314365 /**
315366 * Set Environment object for Spring Profiles (@Profile) integration
316367 *
0 commit comments