我正在尝试从多个csv文件读取数据并将其写入mysql数据库。我正在使用Spring Batch,是否可以调整速度?
我正在使用MultiResourceItemReader读取csv文件,并使用JdbcBatchItemWriter将数据写入数据库。
@Bean
public JdbcBatchItemWriter<Person> writer() {
JdbcBatchItemWriter<Person> writer = new JdbcBatchItemWriter<>();
writer.setItemSqlParameterSourceProvider(
new BeanPropertyItemSqlParameterSourceProvider<Person>());
writer.setSql("INSERT INTO people (first_name, last_name) VALUES (:firstName, :lastName)");
writer.setDataSource(dataSource);
return writer;
}
我希望我的应用程序在几秒钟或几分钟内写入大约500K数据,有办法吗?
答案 0 :(得分:1)
最简单的开始方法是使用Multithreaded step,其中每个块均由单独的线程处理。这样可以加快批处理作业的速度。
您还可以尝试将分区技术与MultiResourcePartitioner
一起使用。使用此分区程序,将为每个文件创建一个分区,然后使用多个线程在本地或使用多个worker远程并行处理这些分区。建议您从TaskExecutorPartitionHandler
开始。当一个线程正在读取/处理一个文件时,另一个线程可能正在将另一个文件的数据写入数据库,这将加快处理速度。您可以找到代码示例here。
您还可以观看High Performance Batch Processing讨论,其中所有缩放技术均通过代码示例进行了详细介绍。
希望这会有所帮助。