问题描述
我有一个 XML 文件 data 。我的目标是将它放入 mysql 数据库中,其中包含一个名为 predict 的表,该表仅包含四列(area_id、parameter_id、datetime 和 value)。 我设法从所有 XML 数据中读取数据,但无法将数据写入数据库。如何将日志类中读取到的数据写入数据库?
下面,有几个类是我用 spring 批处理配置创建的
区域.java
@XmlRootElement(name="area")
@XmlAccessorType(XmlAccessType.FIELD)
public class Area {
@XmlAttribute(name = "id")
private String area_id;
@XmlElement(name = "parameter")
private List<Parameter> area=null;
public List<Parameter> getArea(){
return area;
}
public void setArea(List<Parameter> area){
this.area = area;
}
public Area(){
}
public Area(String area_id) {
this.area_id = area_id;
}
@Override
public String toString() {
return "Area{" +
"area_id='" + area_id + '\'' +
",area=" + area +
'}';
}
}
时间范围.java
@XmlRootElement(name="timerange")
@XmlAccessorType(XmlAccessType.FIELD)
public class TimeRange{
@XmlElement(name = "value")
String value;
@XmlAttribute(name = "datetime")
String datetime;
public TimeRange(){
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getDatetime() {
return datetime;
}
public void setDatetime(String datetime) {
this.datetime = datetime;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("TimeRange{");
sb.append("value='").append(value).append('\'');
sb.append(",datetime='").append(datetime).append('\'');
sb.append('}');
return sb.toString();
}
}
参数.java
@XmlRootElement(name="parameter")
@XmlAccessorType(XmlAccessType.FIELD)
public class Parameter{
@XmlAttribute(name="id")
private String parameter_id;
@XmlElement(name="timerange")
public List<TimeRange> parameter;
public List<TimeRange> getParameter(){
return parameter;
}
public void setParameter(List<TimeRange> parameter){
this.parameter = parameter;
}
public Parameter(){
}
public Parameter(String parameter_id) {
this.parameter_id = parameter_id;
}
@Override
public String toString() {
final StringBuffer sb = new StringBuffer("Parameter{");
sb.append("parameter_id='").append(parameter_id).append('\'');
sb.append(",parameter=").append(parameter);
sb.append('}');
return sb.toString();
}
}
配置.java
@Configuration
public class SpringBatchExampleJobConfig {
@Bean
public ItemReader<Area> areaItemReader() {
Jaxb2Marshaller areaMarshaller = new Jaxb2Marshaller();
areaMarshaller.setClassesToBeBound(Area.class);
return new StaxEventItemReaderBuilder<Area>()
.name("areaReader")
.resource(new ClassPathResource("data/DigitalForecast-SulawesiTengah.xml"))
.addFragmentRootElements("area")
.unmarshaller(areaMarshaller)
.build();
}
@Bean
public ItemWriter<Area> areaItemWriter(){
return new LoggingAreaItemWriter();
}
/**
* Creates a bean that represents the only step of our batch job.
* @param areaItemReader
* @param step1BuilderFactory
* @param areaItemWriter
* @return
*/
@Bean
public Step Step1(ItemReader<Area> areaItemReader,ItemWriter<Area> areaItemWriter,StepBuilderFactory step1BuilderFactory) {
return step1BuilderFactory.get("Step1")
.<Area,Area>chunk(1)
.reader(areaItemReader)
.writer(areaItemWriter)
.build();
}
/**
* Creates a bean that represents our example batch job.
* @param Step1
* @param jobBuilderFactory
* @return
*/
@Bean
public Job areaJob(Step Step1,JobBuilderFactory jobBuilderFactory) {
return jobBuilderFactory.get("areaJob")
.incrementer(new RunIdIncrementer())
.start(Step1)
.build();
}
}
和我用来写可读数据结果的日志类
LoggingAreaItemWriter.java
public class LoggingAreaItemWriter implements ItemWriter<Area> {
private static final Logger LOGGER = LoggerFactory.getLogger(LoggingAreaItemWriter.class);
@Override
public void write(List<? extends Area> list) throws Exception {
LOGGER.info("Writing area: {}",list);
}
}
结果
Writing area: [Area{area_id='501520',area=[Parameter{parameter_id='hu',parameter=[TimeRange{value='95',datetime='202102010000'},TimeRange{value='80',datetime='202102010600'},TimeRange{value='90',datetime='202102011200'},TimeRange{value='95',datetime='202102011800'},TimeRange{value='85',datetime='202102020000'},TimeRange{value='60',datetime='202102020600'},datetime='202102021200'},datetime='202102021800'},datetime='202102030000'},TimeRange{value='55',datetime='202102030600'},datetime='202102031200'},datetime='202102031800'}]},Parameter{parameter_id='humax',datetime='202102031200'}]},Parameter{parameter_id='tmax',parameter=[TimeRange{value='91.4',TimeRange{value='91.4',Parameter{parameter_id='humin',parameter=[TimeRange{value='80',Parameter{parameter_id='tmin',parameter=[TimeRange{value='75.2',TimeRange{value='73.4',Parameter{parameter_id='t',TimeRange{value='75.2',TimeRange{value='77',TimeRange{value='78.8',Parameter{parameter_id='weather',parameter=[TimeRange{value='1',TimeRange{value='1',TimeRange{value='3',TimeRange{value='0',Parameter{parameter_id='wd',parameter=[TimeRange{value='29230',TimeRange{value='4500',TimeRange{value='2230',TimeRange{value='22500',TimeRange{value='15730',TimeRange{value='27000',TimeRange{value='000',Parameter{parameter_id='ws',parameter=[TimeRange{value='1.028888888',TimeRange{value='10.28888888',TimeRange{value='1.028888888',TimeRange{value='2.57222222',datetime='202102031800'}]}]}]
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)