#953 MongoDB Support for Spring Cloud Task #958
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
MongoDB Support for Spring Cloud Task
Overview
This PR adds MongoDB repository support for Spring Cloud Task, following the same patterns as the existing JDBC implementation. Users can now choose MongoDB instead of relational databases for task execution storage.
Key Implementation
1. Auto-Configuration
File:
MongoTaskAutoConfiguration.java
Automatically activates when MongoDB is configured:
spring.cloud.task.repository-type=mongodb
2. Core Components
MongoTaskExecutionDao
MongoTaskExecutionDao.java
MongoTaskConfigurer
MongoTaskConfigurer.java
MongoTaskRepositoryInitializer
MongoTaskRepositoryInitializer.java
MongoLockRepository
MongoLockRepository.java
3. MongoDB Collections
Task execution information is stored across 5 collections:
4. Key Features
findAndModify
Technical Implementation Details
1. Optional Dependency Pattern
MongoDB is declared as an optional dependency, allowing the library to work without MongoDB:
This requires
TaskExecutionDaoFactoryBean
to use reflection for MongoDB DAO creation:Pros:
Cons:
2. Sequence Management
MongoDB doesn't have auto-increment, so we use atomic
findAndModify
:3. Distributed Lock Mechanism
MongoLockRepository
implements Spring Integration'sLockRegistry
interface:Key Improvements:
tryLock(long time, TimeUnit unit)
timeout (was missing in initial implementation)Testing
Test Coverage
MongoTaskExecutionDaoTests
MongoLockRepositoryTests
MongoTaskAutoConfigurationTests
MongoTaskConfigurerTests
MongoTaskRepositoryInitializerTests
Total: 84 tests passing
Features
BaseTaskExecutionDaoTestCases
for same test coverage as JDBCRunning Tests
Usage Examples
Basic Configuration
Single Instance Execution (Distributed Lock)
Application Code