Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringBatch itemReader使用了大量内存_Java_Spring_Spring Batch - Fatal编程技术网

Java SpringBatch itemReader使用了大量内存

Java SpringBatch itemReader使用了大量内存,java,spring,spring-batch,Java,Spring,Spring Batch,我从一个数据库中读取,它有很多行,是的,但是“我想读卡器在这个步骤中会释放内存”。它需要超过1Gb的内存。如何改进它?使用另一种阅读器 ... <bean id="database1" class="org.springframework.batch.item.database.JdbcCursorItemReader"> <property name="name" value="bd1" /> <property name="dataSource"

我从一个数据库中读取,它有很多行,是的,但是“我想读卡器在这个步骤中会释放内存”。它需要超过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>
...
作者
“不做任何事情”被评论

您可以利用spring批处理并行处理:

您可以定义taskExecutor

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

在tasklet中使用此taskexecutor

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


Spring文档:

这很奇怪;我们尝试了很多行,但没有问题。可能是数据库驱动程序的问题?我正在使用
com.mysql.jdbc.driver
如果内存没有释放,那么对象上会有一些东西。你能发布一些代码吗(
RowMapper
ItemProcessor
ItemWriter
)。当然,这也可能是JDBC驱动程序的问题(正如@bellabax所提到的),您可以尝试调整fetch大小等。如何确定这是否是JDBC问题?它与其他东西配合得很好。这可能是每个项目的大小,提交间隔小得多可以吗?这是一个复制过去的错误。请忽略我想展示的是如何使用“task executor”属性引用task executor
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
        <property name="corePoolSize" value="5" />
        <property name="maxPoolSize" value="5" />
 <batch:tasklet ref="whatever_your_tasklet_name" transaction-manager="transactionManager" task-executor="taskExecutor" />