【问题标题】:Getting issue while using HibernatePagingItemReader as custom reader使用 HibernatePagingItemReader 作为自定义阅读器时出现问题
【发布时间】:2017-10-24 13:10:14
【问题描述】:

每次都会检索到相同的记录,但我希望从阅读器中读取下一项。

@Override
public MyObject read() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {          
    HibernatePagingItemReader<MyObject> reader = new HibernatePagingItemReader<>();

    reader.setSessionFactory(taskOracleSessionFactory);
    reader.setQueryString("select t from MyObject t ");
    reader.setPageSize(1);
    reader.setFetchSize(10);
    return reader.read();
}

【问题讨论】:

  • 需要紧急帮助..
  • 您的问题是什么?你得到什么错误?

标签: java spring hibernate spring-batch


【解决方案1】:

如果您每次需要读取某些内容时都调用此方法,您总是会得到相同的结果,因为您在每次方法调用中都重新创建了读取器。

必须创建您的阅读器,然后该方法可以在每次不同的记录时返回,类似于以下代码

public void setup() {
    HibernatePagingItemReader<MyObject> reader = new 
    HibernatePagingItemReader<>();

    reader.setSessionFactory(taskOracleSessionFactory);
    reader.setQueryString("select t from MyObject t ");
    reader.setPageSize(1);
    reader.setFetchSize(10);
}

@Override
public MyObject read() throws Exception, UnexpectedInputException,
    ParseException, NonTransientResourceException {
        return reader.read();
    }

}

【讨论】:

  • 我尝试了建议的事情..现在阅读器正在返回下一项但性能非常慢,因为它每次都获取所有记录。而且我的应用程序有大量的记录需要很长时间才能从数据库中获取。尝试通过使用 fetch Size 和 page Size 来优化这一点。请建议什么是批量获取记录并完成 Reader-Processor-Writer 循环的确切/最佳解决方案。在这个时间点上会很有帮助。
  • 我想这个工作很慢,因为你一次读了一条记录
【解决方案2】:

问题是应用程序获得了如此多的读取器对象实例,并且没有关闭它们的位置。得到数据后关闭HibernatePagingItemReader解决了。

reader.close();

【讨论】:

    猜你喜欢
    • 2021-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-14
    • 1970-01-01
    • 2019-09-18
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多