From c54c5ac847c61ecfd5a62bd9afa7a585a8412505 Mon Sep 17 00:00:00 2001
From: MrBird <852252810@qq.com>
Date: Thu, 12 Mar 2020 11:24:11 +0800
Subject: [PATCH] =?UTF-8?q?Spring=20Batch=E8=BE=93=E5=87=BA=E6=95=B0?=
=?UTF-8?q?=E6=8D=AE?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
69.spring-batch-itemwriter/pom.xml | 56 +++++++++++++
.../SpringBatchItemwriterApplication.java | 15 ++++
.../java/cc/mrbird/batch/entity/TestData.java | 54 +++++++++++++
.../batch/job/DatabaseItemWriterDemo.java | 64 +++++++++++++++
.../mrbird/batch/job/FileItemWriterDemo.java | 75 ++++++++++++++++++
.../batch/job/JsonFileItemWriterDemo.java | 63 +++++++++++++++
.../batch/job/MultiFileItemWriteDemo.java | 79 +++++++++++++++++++
.../batch/job/XmlFileItemWriterDemo.java | 74 +++++++++++++++++
.../batch/reader/ItemReaderConfigure.java | 34 ++++++++
.../batch/writer/ItemWriterConfigure.java | 78 ++++++++++++++++++
.../src/main/resources/application.yml | 6 ++
11 files changed, 598 insertions(+)
create mode 100644 69.spring-batch-itemwriter/pom.xml
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/SpringBatchItemwriterApplication.java
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/entity/TestData.java
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/DatabaseItemWriterDemo.java
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/FileItemWriterDemo.java
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/JsonFileItemWriterDemo.java
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/MultiFileItemWriteDemo.java
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/XmlFileItemWriterDemo.java
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/reader/ItemReaderConfigure.java
create mode 100644 69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/writer/ItemWriterConfigure.java
create mode 100644 69.spring-batch-itemwriter/src/main/resources/application.yml
diff --git a/69.spring-batch-itemwriter/pom.xml b/69.spring-batch-itemwriter/pom.xml
new file mode 100644
index 0000000..620723c
--- /dev/null
+++ b/69.spring-batch-itemwriter/pom.xml
@@ -0,0 +1,56 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 2.2.5.RELEASE
+
+
+ cc.mrbird
+ spring-batch-itemwriter
+ 0.0.1-SNAPSHOT
+ spring-batch-itemwriter
+ Demo project for Spring Boot
+
+
+ 1.8
+
+
+
+
+ org.springframework.boot
+ spring-boot-starter-batch
+
+
+
+ mysql
+ mysql-connector-java
+
+
+ org.springframework.boot
+ spring-boot-starter-jdbc
+
+
+
+ org.springframework
+ spring-oxm
+
+
+ com.thoughtworks.xstream
+ xstream
+ 1.4.11.1
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/SpringBatchItemwriterApplication.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/SpringBatchItemwriterApplication.java
new file mode 100644
index 0000000..950938b
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/SpringBatchItemwriterApplication.java
@@ -0,0 +1,15 @@
+package cc.mrbird.batch;
+
+import org.springframework.batch.core.configuration.annotation.EnableBatchProcessing;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+@EnableBatchProcessing
+public class SpringBatchItemwriterApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(SpringBatchItemwriterApplication.class, args);
+ }
+
+}
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/entity/TestData.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/entity/TestData.java
new file mode 100644
index 0000000..1e21271
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/entity/TestData.java
@@ -0,0 +1,54 @@
+package cc.mrbird.batch.entity;
+
+/**
+ * @author MrBird
+ */
+public class TestData {
+
+ private int id;
+ private String field1;
+ private String field2;
+ private String field3;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getField1() {
+ return field1;
+ }
+
+ public void setField1(String field1) {
+ this.field1 = field1;
+ }
+
+ public String getField2() {
+ return field2;
+ }
+
+ public void setField2(String field2) {
+ this.field2 = field2;
+ }
+
+ public String getField3() {
+ return field3;
+ }
+
+ public void setField3(String field3) {
+ this.field3 = field3;
+ }
+
+ @Override
+ public String toString() {
+ return "TestData{" +
+ "id=" + id +
+ ", field1='" + field1 + '\'' +
+ ", field2='" + field2 + '\'' +
+ ", field3='" + field3 + '\'' +
+ '}';
+ }
+}
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/DatabaseItemWriterDemo.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/DatabaseItemWriterDemo.java
new file mode 100644
index 0000000..999d0bc
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/DatabaseItemWriterDemo.java
@@ -0,0 +1,64 @@
+package cc.mrbird.batch.job;
+
+import cc.mrbird.batch.entity.TestData;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.Step;
+import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
+import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.item.ItemWriter;
+import org.springframework.batch.item.database.BeanPropertyItemSqlParameterSourceProvider;
+import org.springframework.batch.item.database.JdbcBatchItemWriter;
+import org.springframework.batch.item.support.ListItemReader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+
+/**
+ * @author MrBird
+ */
+@Component
+public class DatabaseItemWriterDemo {
+
+ @Autowired
+ private JobBuilderFactory jobBuilderFactory;
+ @Autowired
+ private StepBuilderFactory stepBuilderFactory;
+ @Autowired
+ private ListItemReader simpleReader;
+ @Autowired
+ private DataSource dataSource;
+
+ @Bean
+ public Job datasourceItemWriterJob() {
+ return jobBuilderFactory.get("datasourceItemWriterJob")
+ .start(step())
+ .build();
+ }
+
+ private Step step() {
+ return stepBuilderFactory.get("step")
+ .chunk(2)
+ .reader(simpleReader)
+ .writer(dataSourceItemWriter())
+ .build();
+ }
+
+ private ItemWriter dataSourceItemWriter() {
+ // ItemWriter的实现类之一,mysql数据库数据写入使用JdbcBatchItemWriter,
+ // 其他实现:MongoItemWriter,Neo4jItemWriter等
+ JdbcBatchItemWriter writer = new JdbcBatchItemWriter<>();
+ writer.setDataSource(dataSource); // 设置数据源
+
+ String sql = "insert into TEST(id,field1,field2,field3) values (:id,:field1,:field2,:field3)";
+ writer.setSql(sql); // 设置插入sql脚本
+
+ // 映射TestData对象属性到占位符中的属性
+ BeanPropertyItemSqlParameterSourceProvider provider = new BeanPropertyItemSqlParameterSourceProvider<>();
+ writer.setItemSqlParameterSourceProvider(provider);
+
+ writer.afterPropertiesSet(); // 设置一些额外属性
+ return writer;
+ }
+}
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/FileItemWriterDemo.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/FileItemWriterDemo.java
new file mode 100644
index 0000000..27bba07
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/FileItemWriterDemo.java
@@ -0,0 +1,75 @@
+package cc.mrbird.batch.job;
+
+import cc.mrbird.batch.entity.TestData;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.Step;
+import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
+import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.item.file.FlatFileItemWriter;
+import org.springframework.batch.item.file.transform.LineAggregator;
+import org.springframework.batch.item.support.ListItemReader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.stereotype.Component;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * @author MrBird
+ */
+@Component
+public class FileItemWriterDemo {
+
+ @Autowired
+ private JobBuilderFactory jobBuilderFactory;
+ @Autowired
+ private StepBuilderFactory stepBuilderFactory;
+ @Autowired
+ private ListItemReader simpleReader;
+
+ @Bean
+ public Job fileItemWriterJob() throws Exception {
+ return jobBuilderFactory.get("fileItemWriterJob")
+ .start(step())
+ .build();
+ }
+
+ private Step step() throws Exception {
+ return stepBuilderFactory.get("step")
+ .chunk(2)
+ .reader(simpleReader)
+ .writer(fileItemWriter())
+ .build();
+ }
+
+ private FlatFileItemWriter fileItemWriter() throws Exception {
+ FlatFileItemWriter writer = new FlatFileItemWriter<>();
+
+ FileSystemResource file = new FileSystemResource("/Users/mrbird/Desktop/file");
+ Path path = Paths.get(file.getPath());
+ if (!Files.exists(path)) {
+ Files.createFile(path);
+ }
+ writer.setResource(file); // 设置目标文件路径
+
+ // 把读到的每个TestData对象转换为JSON字符串
+ LineAggregator aggregator = item -> {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ return mapper.writeValueAsString(item);
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ }
+ return "";
+ };
+
+ writer.setLineAggregator(aggregator);
+ writer.afterPropertiesSet();
+ return writer;
+ }
+}
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/JsonFileItemWriterDemo.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/JsonFileItemWriterDemo.java
new file mode 100644
index 0000000..b37be2b
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/JsonFileItemWriterDemo.java
@@ -0,0 +1,63 @@
+package cc.mrbird.batch.job;
+
+import cc.mrbird.batch.entity.TestData;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.Step;
+import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
+import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.item.json.JacksonJsonObjectMarshaller;
+import org.springframework.batch.item.json.JsonFileItemWriter;
+import org.springframework.batch.item.support.ListItemReader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+
+/**
+ * @author MrBird
+ */
+@Component
+public class JsonFileItemWriterDemo {
+
+ @Autowired
+ private JobBuilderFactory jobBuilderFactory;
+ @Autowired
+ private StepBuilderFactory stepBuilderFactory;
+ @Autowired
+ private ListItemReader simpleReader;
+
+ @Bean
+ public Job jsonFileItemWriterJob() throws Exception {
+ return jobBuilderFactory.get("jsonFileItemWriterJob")
+ .start(step())
+ .build();
+ }
+
+ private Step step() throws Exception {
+ return stepBuilderFactory.get("step")
+ .chunk(2)
+ .reader(simpleReader)
+ .writer(jsonFileItemWriter())
+ .build();
+ }
+
+ private JsonFileItemWriter jsonFileItemWriter() throws IOException {
+ // 文件输出目标地址
+ FileSystemResource file = new FileSystemResource("/Users/mrbird/Desktop/file.json");
+ Path path = Paths.get(file.getPath());
+ if (!Files.exists(path)) {
+ Files.createFile(path);
+ }
+ // 将对象转换为json
+ JacksonJsonObjectMarshaller marshaller = new JacksonJsonObjectMarshaller<>();
+ JsonFileItemWriter writer = new JsonFileItemWriter<>(file, marshaller);
+ // 设置别名
+ writer.setName("testDatasonFileItemWriter");
+ return writer;
+ }
+}
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/MultiFileItemWriteDemo.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/MultiFileItemWriteDemo.java
new file mode 100644
index 0000000..4d511d9
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/MultiFileItemWriteDemo.java
@@ -0,0 +1,79 @@
+package cc.mrbird.batch.job;
+
+import cc.mrbird.batch.entity.TestData;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.Step;
+import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
+import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.item.ItemStreamWriter;
+import org.springframework.batch.item.ItemWriter;
+import org.springframework.batch.item.support.ClassifierCompositeItemWriter;
+import org.springframework.batch.item.support.CompositeItemWriter;
+import org.springframework.batch.item.support.ListItemReader;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.classify.Classifier;
+import org.springframework.context.annotation.Bean;
+import org.springframework.stereotype.Component;
+
+import javax.sql.DataSource;
+import java.util.Arrays;
+
+/**
+ * @author MrBird
+ */
+@Component
+public class MultiFileItemWriteDemo {
+
+ @Autowired
+ private JobBuilderFactory jobBuilderFactory;
+ @Autowired
+ private StepBuilderFactory stepBuilderFactory;
+ @Autowired
+ private ListItemReader simpleReader;
+ @Autowired
+ private ItemStreamWriter fileItemWriter;
+ @Autowired
+ private ItemStreamWriter xmlFileItemWriter;
+
+ @Bean
+ public Job multiFileItemWriterJob() {
+ return jobBuilderFactory.get("multiFileItemWriterJob6")
+ .start(step())
+ .build();
+ }
+
+ private Step step() {
+ return stepBuilderFactory.get("step")
+ .chunk(2)
+ .reader(simpleReader)
+ .writer(multiFileItemWriter())
+ // .stream(fileItemWriter)
+ // .stream(xmlFileItemWriter)
+ .build();
+ }
+
+ // 输出数据到多个文件
+ private CompositeItemWriter multiFileItemWriter() {
+ // 使用CompositeItemWriter代理
+ CompositeItemWriter writer = new CompositeItemWriter<>();
+ // 设置具体写代理
+ writer.setDelegates(Arrays.asList(fileItemWriter, xmlFileItemWriter));
+ return writer;
+ }
+
+ // 将数据分类,然后分别输出到对应的文件(此时需要将writer注册到ioc容器,否则报
+ // WriterNotOpenException: Writer must be open before it can be written to)
+ private ClassifierCompositeItemWriter classifierMultiFileItemWriter() {
+ ClassifierCompositeItemWriter writer = new ClassifierCompositeItemWriter<>();
+ writer.setClassifier((Classifier>) testData -> {
+ try {
+ // id能被2整除则输出到普通文本,否则输出到xml文本
+ return testData.getId() % 2 == 0 ? fileItemWriter : xmlFileItemWriter;
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return null;
+ });
+ return writer;
+ }
+}
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/XmlFileItemWriterDemo.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/XmlFileItemWriterDemo.java
new file mode 100644
index 0000000..9648bf4
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/job/XmlFileItemWriterDemo.java
@@ -0,0 +1,74 @@
+package cc.mrbird.batch.job;
+
+import cc.mrbird.batch.entity.TestData;
+import org.springframework.batch.core.Job;
+import org.springframework.batch.core.Step;
+import org.springframework.batch.core.configuration.annotation.JobBuilderFactory;
+import org.springframework.batch.core.configuration.annotation.StepBuilderFactory;
+import org.springframework.batch.item.support.ListItemReader;
+import org.springframework.batch.item.xml.StaxEventItemWriter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Bean;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.oxm.xstream.XStreamMarshaller;
+import org.springframework.stereotype.Component;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author MrBird
+ */
+@Component
+public class XmlFileItemWriterDemo {
+
+ @Autowired
+ private JobBuilderFactory jobBuilderFactory;
+ @Autowired
+ private StepBuilderFactory stepBuilderFactory;
+ @Autowired
+ private ListItemReader simpleReader;
+
+ @Bean
+ public Job xmlFileItemWriterJob() throws Exception {
+ return jobBuilderFactory.get("xmlFileItemWriterJob")
+ .start(step())
+ .build();
+ }
+
+ private Step step() throws Exception {
+ return stepBuilderFactory.get("step")
+ .chunk(2)
+ .reader(simpleReader)
+ .writer(xmlFileItemWriter())
+ .build();
+ }
+
+ private StaxEventItemWriter xmlFileItemWriter() throws IOException {
+ StaxEventItemWriter writer = new StaxEventItemWriter<>();
+
+ // 通过XStreamMarshaller将TestData转换为xml
+ XStreamMarshaller marshaller = new XStreamMarshaller();
+
+ Map> map = new HashMap<>(1);
+ map.put("test", TestData.class);
+
+ marshaller.setAliases(map); // 设置xml标签
+
+ writer.setRootTagName("tests"); // 设置根标签
+ writer.setMarshaller(marshaller);
+
+ FileSystemResource file = new FileSystemResource("/Users/mrbird/Desktop/file.xml");
+ Path path = Paths.get(file.getPath());
+ if (!Files.exists(path)) {
+ Files.createFile(path);
+ }
+
+ writer.setResource(file); // 设置目标文件路径
+ return writer;
+ }
+}
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/reader/ItemReaderConfigure.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/reader/ItemReaderConfigure.java
new file mode 100644
index 0000000..b8adb0e
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/reader/ItemReaderConfigure.java
@@ -0,0 +1,34 @@
+package cc.mrbird.batch.reader;
+
+import cc.mrbird.batch.entity.TestData;
+import org.springframework.batch.item.support.ListItemReader;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author MrBird
+ */
+@Configuration
+public class ItemReaderConfigure {
+
+ @Bean
+ public ListItemReader simpleReader() {
+ List data = new ArrayList<>();
+ TestData testData1 = new TestData();
+ testData1.setId(1);
+ testData1.setField1("11");
+ testData1.setField2("12");
+ testData1.setField3("13");
+ data.add(testData1);
+ TestData testData2 = new TestData();
+ testData2.setId(2);
+ testData2.setField1("21");
+ testData2.setField2("22");
+ testData2.setField3("23");
+ data.add(testData2);
+ return new ListItemReader<>(data);
+ }
+}
diff --git a/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/writer/ItemWriterConfigure.java b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/writer/ItemWriterConfigure.java
new file mode 100644
index 0000000..956249f
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/java/cc/mrbird/batch/writer/ItemWriterConfigure.java
@@ -0,0 +1,78 @@
+package cc.mrbird.batch.writer;
+
+import cc.mrbird.batch.entity.TestData;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import org.springframework.batch.item.file.FlatFileItemWriter;
+import org.springframework.batch.item.file.transform.LineAggregator;
+import org.springframework.batch.item.xml.StaxEventItemWriter;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.core.io.FileSystemResource;
+import org.springframework.oxm.xstream.XStreamMarshaller;
+
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
+
+/**
+ * @author MrBird
+ */
+@Configuration
+public class ItemWriterConfigure {
+
+ @Bean
+ public FlatFileItemWriter fileItemWriter() throws Exception {
+ FlatFileItemWriter writer = new FlatFileItemWriter<>();
+
+ FileSystemResource file = new FileSystemResource("/Users/mrbird/Desktop/file");
+ Path path = Paths.get(file.getPath());
+ if (!Files.exists(path)) {
+ Files.createFile(path);
+ }
+
+ writer.setResource(file); // 设置目标文件路径
+
+ // 把读到的每个TestData对象转换为字符串
+ LineAggregator aggregator = item -> {
+ try {
+ ObjectMapper mapper = new ObjectMapper();
+ return mapper.writeValueAsString(item);
+ } catch (JsonProcessingException e) {
+ e.printStackTrace();
+ }
+ return "";
+ };
+
+ writer.setLineAggregator(aggregator);
+ writer.afterPropertiesSet();
+ return writer;
+ }
+
+ @Bean
+ public StaxEventItemWriter xmlFileItemWriter() throws Exception {
+ StaxEventItemWriter writer = new StaxEventItemWriter<>();
+
+ // 通过XStreamMarshaller将TestData转换为xml
+ XStreamMarshaller marshaller = new XStreamMarshaller();
+
+ Map> map = new HashMap<>(1);
+ map.put("test", TestData.class);
+
+ marshaller.setAliases(map); // 设置xml标签
+
+ writer.setRootTagName("tests"); // 设置根标签
+ writer.setMarshaller(marshaller);
+
+ FileSystemResource file = new FileSystemResource("/Users/mrbird/Desktop/file.xml");
+ Path path = Paths.get(file.getPath());
+ if (!Files.exists(path)) {
+ Files.createFile(path);
+ }
+
+ writer.setResource(file); // 设置目标文件路径
+ return writer;
+ }
+}
diff --git a/69.spring-batch-itemwriter/src/main/resources/application.yml b/69.spring-batch-itemwriter/src/main/resources/application.yml
new file mode 100644
index 0000000..4c962f7
--- /dev/null
+++ b/69.spring-batch-itemwriter/src/main/resources/application.yml
@@ -0,0 +1,6 @@
+spring:
+ datasource:
+ driver-class-name: com.mysql.cj.jdbc.Driver
+ url: jdbc:mysql://127.0.0.1:3306/springbatch
+ username: root
+ password: 123456
\ No newline at end of file