除jpaitemwriter外,将项目写入mariadb的更快方法

时间:2019-01-15 22:48:50

标签: java spring jdbc spring-batch itemwriter

我有一个批处理作业,可以从Oracle数据库读取数据,使用JPA ITEM READER存储JPA,并使用JPA ITEM WRITER写入MariaDB。有没有办法将大量插入MariaDB或以mongodb具有bulkoperations.execute()方法的方式大量执行?

我已使用提供的JpaItemWriter如下:

@Bean
@Transactional
public JpaItemWriter<entity.maria.class> classJpaItemWriter() {
    JpaItemWriter<entity.maria.class> writer = new JpaItemWriter<>();
    writer.setEntityManagerFactory(mariaEntityManager.getObject());

    return writer;
}

读者是:

public JpaPagingItemReader<PojoClass> classJpaReader() throws Exception {

    String jpqlQuery = "SELECT t FROM PojoClass t where rownum < 15001";
    JpaPagingItemReader<PojoClass> reader = new JpaPagingItemReader<>();
    reader.setQueryString(jpqlQuery);
    reader.setEntityManagerFactory(oracleEntityManager.getObject());
    reader.setPageSize(100000);
    reader.afterPropertiesSet();
    reader.setSaveState(true);
    return reader;
}

步骤配置为:

@Bean
public Step classStep() throws Exception {
    Step auditStep = stepBuilderFactory.get(
            "entity.oracle.PojoClass").<class, entity.maria.class>chunk(
            10000)
            .reader(classJpaReader())
            .writer(classJpaItemWriter())
            .transactionManager(mariaTransactionManager)
            .listener(auditWriterListener())
            .faultTolerant()
            .skipLimit(10000)
            .skip(Exception.class)
            .build();
    return auditStep;
}

我想做一个自定义编写器,该编写器会将插入值批量插入mariaDb中,并希望减少插入/向上插入的时间。当前插入15000所需的时间为326秒...这似乎很长。

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

您可以尝试在幕后使用JdbcBatchItemWriter的{​​{1}}。通常,这使JPA项目编写器更快,因为它不与持久性上下文,一级/二级缓存等交互。

希望这会有所帮助。