gpt4 book ai didi

java - SpringBatch itemReader 使用大量内存

转载 作者:太空宇宙 更新时间:2023-11-04 15:09:19 24 4
gpt4 key购买 nike

我正在从数据库中读取数据,它有很多行,是的,但是“我认为读者在该步骤中释放了内存”。它需要超过 1Gb 的内存。怎样才能改善呢?使用另一种阅读器?

...
<bean id="database1" class="org.springframework.batch.item.database.JdbcCursorItemReader">
<property name="name" value="bd1" />
<property name="dataSource" ref="dataSource1" />
<property name="sql" value="select image from info where image like '%/Images/%' or image like '%/temp/%'" />
<property name="rowMapper">
<bean class="foo.ImagesRowMapper" />
</property>
</bean>

<batch:step id="1Step" next="2Step">
<batch:tasklet>
<batch:chunk reader="database1" processor="processor" writer="writer" commit-interval="20"/>
</batch:tasklet>
</batch:step>
...

行映射器

public class ImagesRowMapper implements RowMapper<String> {

@Override
public String mapRow(ResultSet rs, int rowNum) throws SQLException {
return rs.getString("image");
}

}

处理器

@Override
public String process(String item) throws Exception {
if(logger.isDebugEnabled()){
logger.debug("process. processing {}", item);
}
if (item == ""){
return null;
}
return relativePath(item); //relativePath only change the string an return it
}

作家
没有做任何评论
visualVM

最佳答案

您可以利用 Spring Batch 并行处理:

你可以定义一个taskExecutor

<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
<property name="corePoolSize" value="5" />
<property name="maxPoolSize" value="5" />

在您的tasklet中使用这个任务执行器

 <batch:tasklet ref="whatever_your_tasklet_name" transaction-manager="transactionManager" task-executor="taskExecutor" />

Spring 文档:Scalability

关于java - SpringBatch itemReader 使用大量内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21547373/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com