Update MongoDB sample
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2020-2022 the original author or authors.
|
||||
* Copyright 2020-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -20,14 +20,13 @@ import java.util.Map;
|
||||
|
||||
import org.springframework.batch.core.Job;
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
|
||||
import org.springframework.batch.core.job.builder.JobBuilder;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.core.step.builder.StepBuilder;
|
||||
import org.springframework.batch.item.data.MongoItemReader;
|
||||
import org.springframework.batch.item.data.MongoItemWriter;
|
||||
import org.springframework.batch.item.data.builder.MongoItemReaderBuilder;
|
||||
import org.springframework.batch.item.data.MongoPagingItemReader;
|
||||
import org.springframework.batch.item.data.builder.MongoItemWriterBuilder;
|
||||
import org.springframework.batch.item.data.builder.MongoPagingItemReaderBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
@@ -38,18 +37,17 @@ import static org.springframework.data.mongodb.core.query.Criteria.where;
|
||||
|
||||
/**
|
||||
* This job will remove document "foo3" from collection "person_out" using
|
||||
* {@link MongoItemWriter#setDelete(boolean)}.
|
||||
* {@link MongoItemWriter#setMode(MongoItemWriter.Mode)}}.
|
||||
*
|
||||
* @author Mahmoud Ben Hassine
|
||||
*/
|
||||
@EnableBatchProcessing
|
||||
public class DeletionJobConfiguration {
|
||||
|
||||
@Bean
|
||||
public MongoItemReader<Person> mongoPersonReader(MongoTemplate mongoTemplate) {
|
||||
public MongoPagingItemReader<Person> mongoPersonReader(MongoTemplate mongoTemplate) {
|
||||
Map<String, Sort.Direction> sortOptions = new HashMap<>();
|
||||
sortOptions.put("name", Sort.Direction.DESC);
|
||||
return new MongoItemReaderBuilder<Person>().name("personItemReader")
|
||||
return new MongoPagingItemReaderBuilder<Person>().name("personItemReader")
|
||||
.collection("person_out")
|
||||
.targetType(Person.class)
|
||||
.template(mongoTemplate)
|
||||
@@ -61,14 +59,14 @@ public class DeletionJobConfiguration {
|
||||
@Bean
|
||||
public MongoItemWriter<Person> mongoPersonRemover(MongoTemplate mongoTemplate) {
|
||||
return new MongoItemWriterBuilder<Person>().template(mongoTemplate)
|
||||
.delete(true)
|
||||
.mode(MongoItemWriter.Mode.REMOVE)
|
||||
.collection("person_out")
|
||||
.build();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public Step deletionStep(JobRepository jobRepository, PlatformTransactionManager transactionManager,
|
||||
MongoItemReader<Person> mongoPersonReader, MongoItemWriter<Person> mongoPersonRemover) {
|
||||
MongoPagingItemReader<Person> mongoPersonReader, MongoItemWriter<Person> mongoPersonRemover) {
|
||||
return new StepBuilder("step", jobRepository).<Person, Person>chunk(2, transactionManager)
|
||||
.reader(mongoPersonReader)
|
||||
.writer(mongoPersonRemover)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2020-2022 the original author or authors.
|
||||
* Copyright 2020-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -20,14 +20,13 @@ import java.util.Map;
|
||||
|
||||
import org.springframework.batch.core.Job;
|
||||
import org.springframework.batch.core.Step;
|
||||
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
|
||||
import org.springframework.batch.core.job.builder.JobBuilder;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.core.step.builder.StepBuilder;
|
||||
import org.springframework.batch.item.data.MongoItemReader;
|
||||
import org.springframework.batch.item.data.MongoPagingItemReader;
|
||||
import org.springframework.batch.item.data.MongoItemWriter;
|
||||
import org.springframework.batch.item.data.builder.MongoItemReaderBuilder;
|
||||
import org.springframework.batch.item.data.builder.MongoItemWriterBuilder;
|
||||
import org.springframework.batch.item.data.builder.MongoPagingItemReaderBuilder;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.data.domain.Sort;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
@@ -35,18 +34,17 @@ import org.springframework.transaction.PlatformTransactionManager;
|
||||
|
||||
/**
|
||||
* This job will copy documents from collection "person_in" into collection "person_out"
|
||||
* using {@link MongoItemReader} and {@link MongoItemWriter}.
|
||||
* using {@link MongoPagingItemReader} and {@link MongoItemWriter}.
|
||||
*
|
||||
* @author Mahmoud Ben Hassine
|
||||
*/
|
||||
@EnableBatchProcessing
|
||||
public class InsertionJobConfiguration {
|
||||
|
||||
@Bean
|
||||
public MongoItemReader<Person> mongoItemReader(MongoTemplate mongoTemplate) {
|
||||
public MongoPagingItemReader<Person> mongoItemReader(MongoTemplate mongoTemplate) {
|
||||
Map<String, Sort.Direction> sortOptions = new HashMap<>();
|
||||
sortOptions.put("name", Sort.Direction.DESC);
|
||||
return new MongoItemReaderBuilder<Person>().name("personItemReader")
|
||||
return new MongoPagingItemReaderBuilder<Person>().name("personItemReader")
|
||||
.collection("person_in")
|
||||
.targetType(Person.class)
|
||||
.template(mongoTemplate)
|
||||
@@ -62,7 +60,7 @@ public class InsertionJobConfiguration {
|
||||
|
||||
@Bean
|
||||
public Step step(JobRepository jobRepository, PlatformTransactionManager transactionManager,
|
||||
MongoItemReader<Person> mongoItemReader, MongoItemWriter<Person> mongoItemWriter) {
|
||||
MongoPagingItemReader<Person> mongoItemReader, MongoItemWriter<Person> mongoItemWriter) {
|
||||
return new StepBuilder("step", jobRepository).<Person, Person>chunk(2, transactionManager)
|
||||
.reader(mongoItemReader)
|
||||
.writer(mongoItemWriter)
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2020-2022 the original author or authors.
|
||||
* Copyright 2020-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -18,6 +18,11 @@ package org.springframework.batch.samples.mongodb;
|
||||
import com.mongodb.client.MongoClient;
|
||||
import com.mongodb.client.MongoClients;
|
||||
|
||||
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
|
||||
import org.springframework.batch.core.explore.JobExplorer;
|
||||
import org.springframework.batch.core.explore.support.MongoJobExplorerFactoryBean;
|
||||
import org.springframework.batch.core.repository.JobRepository;
|
||||
import org.springframework.batch.core.repository.support.MongoJobRepositoryFactoryBean;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
@@ -26,9 +31,11 @@ import org.springframework.data.mongodb.MongoDatabaseFactory;
|
||||
import org.springframework.data.mongodb.MongoTransactionManager;
|
||||
import org.springframework.data.mongodb.core.MongoTemplate;
|
||||
import org.springframework.data.mongodb.core.SimpleMongoClientDatabaseFactory;
|
||||
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
|
||||
|
||||
@Configuration
|
||||
@PropertySource("classpath:/org/springframework/batch/samples/mongodb/mongodb-sample.properties")
|
||||
@EnableBatchProcessing
|
||||
public class MongoDBConfiguration {
|
||||
|
||||
@Value("${mongodb.host}")
|
||||
@@ -48,7 +55,10 @@ public class MongoDBConfiguration {
|
||||
|
||||
@Bean
|
||||
public MongoTemplate mongoTemplate(MongoClient mongoClient) {
|
||||
return new MongoTemplate(mongoClient, "test");
|
||||
MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, "test");
|
||||
MappingMongoConverter converter = (MappingMongoConverter) mongoTemplate.getConverter();
|
||||
converter.setMapKeyDotReplacement(".");
|
||||
return mongoTemplate;
|
||||
}
|
||||
|
||||
@Bean
|
||||
@@ -61,4 +71,24 @@ public class MongoDBConfiguration {
|
||||
return new MongoTransactionManager(mongoDatabaseFactory);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public JobRepository jobRepository(MongoTemplate mongoTemplate, MongoTransactionManager transactionManager)
|
||||
throws Exception {
|
||||
MongoJobRepositoryFactoryBean jobRepositoryFactoryBean = new MongoJobRepositoryFactoryBean();
|
||||
jobRepositoryFactoryBean.setMongoOperations(mongoTemplate);
|
||||
jobRepositoryFactoryBean.setTransactionManager(transactionManager);
|
||||
jobRepositoryFactoryBean.afterPropertiesSet();
|
||||
return jobRepositoryFactoryBean.getObject();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public JobExplorer jobExplorer(MongoTemplate mongoTemplate, MongoTransactionManager transactionManager)
|
||||
throws Exception {
|
||||
MongoJobExplorerFactoryBean jobExplorerFactoryBean = new MongoJobExplorerFactoryBean();
|
||||
jobExplorerFactoryBean.setMongoOperations(mongoTemplate);
|
||||
jobExplorerFactoryBean.setTransactionManager(transactionManager);
|
||||
jobExplorerFactoryBean.afterPropertiesSet();
|
||||
return jobExplorerFactoryBean.getObject();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2020-2023 the original author or authors.
|
||||
* Copyright 2020-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -17,6 +17,7 @@ package org.springframework.batch.samples.mongodb;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import com.mongodb.client.MongoCollection;
|
||||
import org.bson.Document;
|
||||
@@ -45,6 +46,18 @@ public class MongoDBSampleApp {
|
||||
ApplicationContext context = new AnnotationConfigApplicationContext(configurationClasses);
|
||||
MongoTemplate mongoTemplate = context.getBean(MongoTemplate.class);
|
||||
|
||||
// create meta-data collections and sequences
|
||||
mongoTemplate.createCollection("BATCH_JOB_INSTANCE");
|
||||
mongoTemplate.createCollection("BATCH_JOB_EXECUTION");
|
||||
mongoTemplate.createCollection("BATCH_STEP_EXECUTION");
|
||||
mongoTemplate.createCollection("BATCH_SEQUENCES");
|
||||
mongoTemplate.getCollection("BATCH_SEQUENCES")
|
||||
.insertOne(new Document(Map.of("_id", "BATCH_JOB_INSTANCE_SEQ", "count", 0L)));
|
||||
mongoTemplate.getCollection("BATCH_SEQUENCES")
|
||||
.insertOne(new Document(Map.of("_id", "BATCH_JOB_EXECUTION_SEQ", "count", 0L)));
|
||||
mongoTemplate.getCollection("BATCH_SEQUENCES")
|
||||
.insertOne(new Document(Map.of("_id", "BATCH_STEP_EXECUTION_SEQ", "count", 0L)));
|
||||
|
||||
// clear collections and insert some documents in "person_in"
|
||||
MongoCollection<Document> personsIn = mongoTemplate.getCollection("person_in");
|
||||
MongoCollection<Document> personsOut = mongoTemplate.getCollection("person_out");
|
||||
|
||||
Reference in New Issue
Block a user