做定时任务时的注意事项,比如是做查询数据统计,先查询统计出数据,然后更新统计表里面的数据
当定时任务太多是,可能导致报错。连接泄露,没有被正常关闭
java.lang.Exception: Apparent connection leak detected
注意任务方法的写法,这里以jpa为例
查询语句的方法要加上 @Transactional(readOnly = true)
@Transactional(readOnly = true)
public List<StatByTwoGroupDTO> getTwoGroupStatData(String sql){
Query query = null;
try {
Session session = entityManager.unwrap(Session.class);
query = session.createNativeQuery(sql);
List<Object[]> list = query.getResultList();
return new ArrayList<>(map.values());
}catch (Exception e){
LOG.error("----------getTwoGroupStatData error...");
LOG.error(ExceptionUtils.getExceptionMessage(e));
}finally {
if(query != null){
query = null;
}
}
return null;
}
//具体的统计方法
@Transactional(rollbackFor = Exception.class)
@Modifying
public void doStatAndUpdateDataByTwoGroup(String sql, String dataType){
List<StatByTwoGroupDTO> groupByQxdmList = getTwoGroupStatData(sql);
//做更新数据的操作,当要新增数据时,最好用批量保存的方式
}