JdbcTemplate 的参数设置详解。
@Bean
public JdbcTemplate rechargeJdbcTemplate(DataSource rechargeDataSource, @Value("${hikaricp.fetchSize}") Integer fetchSize) {
JdbcTemplate jdbcTemplate = new JdbcTemplate(rechargeDataSource, true);
jdbcTemplate.setLazyInit(true);
// 必须设置 autoCommit = false,否则 该设置不起作用
jdbcTemplate.setFetchSize(fetchSize); // 单次tcp数据传输返回的条数,oracel 默认是10,可以设置为 100等
jdbcTemplate.setMaxRows(50000); // 最多返回的行数,多了会出现JVM的 OOM
// jdbcTemplate.setQueryTimeout(120); 该方法会 在 事务识别加上 超时设置,超时的事务将会被终止, 作用就是 重写 @Transactional 中的参数 timeout( 默认是-1)
/**
* 仅对 call 存过的返回值起作用 ,Map 的大小写不区分
*/
jdbcTemplate.setResultsMapCaseInsensitive(true);
jdbcTemplate.afterPropertiesSet(); //其实没必要,spring 加载该Bean的时候,会自动执行
return jdbcTemplate;
}
防止OOM ,有2种方案:
1》setMaxRows(不要太大的数字,经验值5w);
1》返回 ResultSet 本尊。java后端根据 情况自行处理数据,而不是一次性全部返回。