我有一个写在spring boot框架之上的Spring batch应用程序,它被用来从oracle数据库读取数据(使用JDBCcursorItemreader)并写入Mongo数据库(MongoItemWriter)。对于每个表我都有一个POJO类。
是否有其他属性可以在mongo DB中包含空字段?
比如说。Oracle表
Mongo Collection:
{
"Name":"xyz",
"Number":"16"
}
想要下面的格式
{
"Name":"xyz",
"Number":"16",
"Date" : null
}
我想在mongo DB中显示日期列。我已经尝试使用jsoninclude属性,但它不工作。谁能对此提出建议?
代码 Batch File:
package com.sam.oracletomongo;
import java.util.ArrayList;
import java.util.List;
import javax.sql.DataSource;
import org.springframework.batch.core.Job;
import org.springframework.batch.core.Step;
import org.springframework.batch.core.configuration.JobRegistry;
import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
import org.springframework.batch.core.configuration.annotation.StepScope;
import org.springframework.batch.core.configuration.support.JobRegistryBeanPostProcessor;
import org.springframework.batch.core.job.builder.FlowBuilder;
import org.springframework.batch.core.job.flow.Flow;
import org.springframework.batch.core.job.flow.support.SimpleFlow;
import org.springframework.batch.core.launch.support.RunIdIncrementer;
import org.springframework.batch.core.partition.PartitionHandler;
import org.springframework.batch.core.partition.support.TaskExecutorPartitionHandler;
import org.springframework.batch.item.data.MongoItemWriter;
import org.springframework.batch.item.data.builder.MongoItemWriterBuilder;
import org.springframework.batch.item.database.JdbcCursorItemReader;
import org.springframework.batch.item.database.builder.JdbcCursorItemReaderBuilder;
import org.springframework.batch.item.database.support.ListPreparedStatementSetter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.core.task.SimpleAsyncTaskExecutor;
import org.springframework.core.task.TaskExecutor;
import org.springframework.data.mongodb.core.MongoTemplate;
@Configuration
@EnableBatchProcessing
@Import(AdditionalBatchConfiguration.class)
public class BABatchConfig {
@Autowired
public DataSource datasource;
@Autowired
public MongoTemplate mongotemplate;
@Autowired
public JobBuilderFactory jobBuilderFactory;
@Autowired
public StepBuilderFactory stepBuilderFactory;
@Bean
@StepScope
public JdbcCursorItemReader<BA> itemReaderBA(@Value("#{jobParameters[deltadate]}") String deltadate,@Value("#{jobParameters[rundate]}") String rundate) {
ListPreparedStatementSetter listPreparedStatementSetter = new ListPreparedStatementSetter();
List<String> l1=new ArrayList<String>();
l1.add(deltadate);
l1.add(rundate);
listPreparedStatementSetter.setParameters(l1);
return new JdbcCursorItemReaderBuilder<BA>()
.dataSource(datasource) // change accordingly if you use another data source
.name("fooReader")
.sql("SELECT SA_NO,SA_NAME,DATE1,DATE2,DATE3,ACTIVE FROM SAMPLE WHERE DATE2 between TO_DATE(?,'YYYY-MM-DD') and TO_DATE(?, 'YYYY-MM-DD')")
.rowMapper(new BARowMapper())
.preparedStatementSetter(listPreparedStatementSetter)
.build();
}
@Bean
public MongoItemWriter<BA> writerBA(MongoTemplate mongoTemplate) {
return new MongoItemWriterBuilder<BA>().template(mongoTemplate).collection("BA")
.build();
}
@Bean
public Job BAJob() {
return jobBuilderFactory.get("BA")
.incrementer(new CustomParametersIncrementerImpl(datasource))
.start(BAstep())
.build();
}
@Bean
public Step BAstep() {
return stepBuilderFactory.get("BAStep1")
.<BA, BA> chunk(10)
.reader(itemReaderBA(null,null))
.writer(writerBA(mongotemplate))
.build();
}
}
Model Class:
package com.sam.oracletomongo;
public class BA {
private String _id;
private String saNo;
private String saName;
private String Date1;
private String Date2;
private String Date3;
private String active;
public String get_id() {
return _id;
}
public void set_id(String _id) {
this._id = _id;
}
public String getsaNo() {
return saNo;
}
public void setBaNo(String saNo) {
this.saNo = saNo;
}
public String getsaName() {
return saName;
}
public void setBaName(String saName) {
this.saName = saName;
}
public String getDate1() {
return Date1;
}
public void setDate1(String Date1) {
this.Date1 = Date1;
}
public String getDate2() {
return Date2;
}
public void setDate2(String Date2) {
this.Date2 = Date2;
}
public String getDate3() {
return Date3;
}
public void setDate3(String Date3) {
this.Date3 = Date3;
}
public String getActive() {
return active;
}
public void setActive(String active) {
this.active = active;
}
@Override
public String toString() {
return "BA [_id=" + _id + ", saNo=" + saNo + ", saName=" + saName + ", Date1=" + Date1 + ", Date2="
+ Date2 + ", Date3=" + Date3 + ", active=" + active + "]";
}
}
Mapper Class:
package com.sam.oracletomongo;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.jdbc.core.RowMapper;
public class BARowMapper implements RowMapper<BA> {
public BA mapRow(ResultSet rs, int rowNum) throws SQLException
{
BA ba = new BA();
String id=rs.getString("sA_NO");
ba.set_id(id);
ba.setsaNo(rs.getString("sA_NO"));
ba.setsaName(rs.getString("sA_NAME"));
ba.setDate1(rs.getString("DATE1"));
ba.setDate2(rs.getString("DATE2"));
ba.setDate3(rs.getString("DATE3"));
ba.setActive(rs.getString("ACTIVE"));
return ba;
}
}
StackOverflow:spring - Null values needs to be displayed in Mongo DB through POJO class - Stack Overflow