Core Traits
ItemReader, ItemWriter, ItemProcessor, Tasklet
Spring Batch RS uses feature flags to enable optional functionality. This keeps the core library lean while allowing you to opt into specific capabilities.
These features are always included and require no feature flags:
Core Traits
ItemReader, ItemWriter, ItemProcessor, Tasklet
Job & Step
JobBuilder, StepBuilder, execution management
Error Handling
BatchError, fault tolerance, skip/retry logic
Logger Writer
LoggerWriter for debugging output
[dependencies]spring-batch-rs = { version = "0.1", features = ["csv"] }Provides:
CsvItemReader<R> - Read CSV files and stringsCsvItemWriter<O, W> - Write CSV filesUse for:
Dependencies:
csv crate[dependencies]spring-batch-rs = { version = "0.1", features = ["json"] }Provides:
JsonItemReader<I, R> - Streaming JSON array readerJsonItemWriter<O, W> - JSON array writer with pretty-printingUse for:
Dependencies:
serde_json crate[dependencies]spring-batch-rs = { version = "0.1", features = ["xml"] }Provides:
XmlItemReader<R, I> - Extract elements by tag nameXmlItemWriter<O, W> - Generate XML documentsUse for:
Dependencies:
quick-xml crateserde-xml-rs crate[dependencies]spring-batch-rs = { version = "0.1", features = ["rdbc-postgres"] }sqlx = { version = "0.7", features = ["runtime-tokio-native-tls", "postgres"] }Provides:
PostgresRdbcItemReader<I> - Paginated PostgreSQL queriesPostgresItemWriter<O> - Bulk PostgreSQL insertsUse for:
Dependencies:
sqlx with PostgreSQL supporttokio async runtime[dependencies]spring-batch-rs = { version = "0.1", features = ["rdbc-mysql"] }sqlx = { version = "0.7", features = ["runtime-tokio-native-tls", "mysql"] }Provides:
MysqlRdbcItemReader<I> - Paginated MySQL queriesMysqlItemWriter<O> - Bulk MySQL insertsUse for:
Dependencies:
sqlx with MySQL supporttokio async runtime[dependencies]spring-batch-rs = { version = "0.1", features = ["rdbc-sqlite"] }sqlx = { version = "0.7", features = ["runtime-tokio-native-tls", "sqlite"] }Provides:
SqliteRdbcItemReader<I> - Paginated SQLite queriesSqliteItemWriter<O> - Bulk SQLite insertsUse for:
Dependencies:
sqlx with SQLite supporttokio async runtime[dependencies]spring-batch-rs = { version = "0.1", features = ["mongodb"] }mongodb = "2.8"Provides:
MongodbItemReader<I> - Cursor-based MongoDB queriesMongodbItemWriter<O> - Bulk MongoDB insertsUse for:
Dependencies:
mongodb official driverWithObjectId trait implementation[dependencies]spring-batch-rs = { version = "0.1", features = ["orm"] }sea-orm = { version = "0.12", features = ["sqlx-postgres", "runtime-tokio-native-tls"] }Provides:
OrmItemReader<I> - Read using SeaORM entitiesOrmItemWriter<O> - Write using SeaORM entitiesUse for:
Dependencies:
sea-orm with appropriate database backend[dependencies]spring-batch-rs = { version = "0.1", features = ["zip"] }Provides:
ZipTasklet - Compress files and directoriesCapabilities:
Use for:
Dependencies:
zip crate[dependencies]spring-batch-rs = { version = "0.1", features = ["ftp"] }Provides:
FtpTasklet - Upload/download via FTP/FTPSCapabilities:
Use for:
Dependencies:
ftp crate[dependencies]spring-batch-rs = { version = "0.1", features = ["fake"] }Provides:
PersonReader - Generate fake person dataPerson struct with realistic test dataUse for:
Dependencies:
fake crateFile Processing
features = ["csv", "json", "xml"]Process all common file formats
Database ETL
features = ["rdbc-postgres", "rdbc-mysql", "csv", "json"]Database to file exports and imports
Complete Pipeline
features = ["csv", "json", "rdbc-postgres", "zip", "ftp"]End-to-end data pipeline with delivery
NoSQL Processing
features = ["mongodb", "json", "csv"]MongoDB data transformation
| Feature Combination | Additional Compile Time |
|---|---|
| Core only | Baseline |
| + csv, json, xml | +10-15 seconds |
| + Single database | +30-45 seconds (sqlx) |
| + All databases | +45-60 seconds |
| + mongodb | +20-30 seconds |
| + All features | +60-90 seconds |
| Feature Combination | Approximate Size (Release) |
|---|---|
| Core only | ~1 MB |
| + File formats | ~2 MB |
| + Single database | ~4-5 MB |
| + All databases | ~7-9 MB |
| + All features | ~10-12 MB |
Use conditional compilation for feature-specific code:
#[cfg(feature = "csv")]use spring_batch_rs::item::csv::CsvItemReaderBuilder;
#[cfg(feature = "rdbc-postgres")]use spring_batch_rs::item::rdbc::postgres::PostgresItemWriterBuilder;
fn create_reader() -> Box<dyn ItemReader<MyType>> { #[cfg(feature = "csv")] { Box::new(CsvItemReaderBuilder::new().from_path("data.csv").unwrap()) }
#[cfg(not(feature = "csv"))] { panic!("CSV feature not enabled") }}Check available features at runtime:
fn check_features() { println!("CSV support: {}", cfg!(feature = "csv")); println!("JSON support: {}", cfg!(feature = "json")); println!("PostgreSQL support: {}", cfg!(feature = "rdbc-postgres"));}Before:
[dependencies]spring-batch-rs = "0.1"After:
[dependencies]spring-batch-rs = { version = "0.1", features = ["csv", "json", "rdbc-postgres"] }sqlx = { version = "0.7", features = ["runtime-tokio-native-tls", "postgres"] }If your project grows and you want to optimize:
Cargo.tomlcargo clean and rebuildCan’t find a feature you need? We welcome contributions!