Memory leaks jdbctemplate查询:线程中的异常";“文件观察者”;java.lang.OutOfMemoryError:java堆空间
我得到了一个内存不足的错误,当我运行500k+结果查询时发生了这个错误。 我试图创建一个结果集,以使用指向db结果的“指针”。 并将获取大小设置为1000。 我还能做什么? 我正在使用spring boot和maria db驱动程序,谢谢 ExcelComponent.java DatabaseChooser.javaMemory leaks jdbctemplate查询:线程中的异常";“文件观察者”;java.lang.OutOfMemoryError:java堆空间,memory-leaks,spring-boot,mariadb,heap-memory,jdbctemplate,Memory Leaks,Spring Boot,Mariadb,Heap Memory,Jdbctemplate,我得到了一个内存不足的错误,当我运行500k+结果查询时发生了这个错误。 我试图创建一个结果集,以使用指向db结果的“指针”。 并将获取大小设置为1000。 我还能做什么? 我正在使用spring boot和maria db驱动程序,谢谢 ExcelComponent.java DatabaseChooser.java @Component public class DatabaseChooser { public JdbcTemplate getJdbcTemplateByDatab
@Component
public class DatabaseChooser {
public JdbcTemplate getJdbcTemplateByDatabaseId(SettingsDbsModel dbModel){
DataSource dataSource = createDatasource(dbModel);
try {
dataSource.getConnection().setAutoCommit(false);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource, true);
jdbcTemplate.setFetchSize(100);
return jdbcTemplate;
}
ResultSetExelWriter.java
public class ResultSetExcelWriter implements ResultSetExtractor{
ExcelWriterNew writer;
public ResultSetExcelWriter(WriterOptions csvWriterOptions) {
writer = new ExcelWriterNew(csvWriterOptions);
}
@Override
public Object extractData(ResultSet rs) throws SQLException, Da
taAccessException {
while (rs.next()) {
System.out.println(rs.getObject(1));
}
writer.make();
return null;
}
}
病人:“我这样做很痛。”。医生:“好吧,不要那样做。”说真的,你的程序会对500K行做什么?数据是否可以用SQL进行汇总,以便只需要将几行数据发送回程序?你能写一个存储程序来做这项工作吗?等等,或者把它分成1K行块。或者…应将行逐个写入excel/csv。在没有保存到内存的情况下(为了防止内存泄漏,我尝试使用游标ResultSet迭代结果),但仍然会使内存膨胀。哪一个是主内存占用器?JAVA擅长?MySQL?患者:“当我这样做的时候会很痛。”。医生:“好吧,不要那样做。”说真的,你的程序会对500K行做什么?数据是否可以用SQL进行汇总,以便只需要将几行数据发送回程序?你能写一个存储程序来做这项工作吗?等等,或者把它分成1K行块。或者…应将行逐个写入excel/csv。在没有保存到内存的情况下(为了防止内存泄漏,我尝试使用游标ResultSet迭代结果),但仍然会使内存膨胀。哪一个是主内存占用器?JAVA擅长?MySQL?
public class ResultSetExcelWriter implements ResultSetExtractor{
ExcelWriterNew writer;
public ResultSetExcelWriter(WriterOptions csvWriterOptions) {
writer = new ExcelWriterNew(csvWriterOptions);
}
@Override
public Object extractData(ResultSet rs) throws SQLException, Da
taAccessException {
while (rs.next()) {
System.out.println(rs.getObject(1));
}
writer.make();
return null;
}
}