弹簧MVC和Jasper的可能内存泄漏我的报告

时间:2017-12-13 12:54:06

标签: java spring memory-leaks jasper-reports

我已经集成了Spring MVC 4和Jasper 6.4.3并且它已成功生成PDF报告但我在Tomcat控制台中遇到了一些可能的内存泄漏问题。

问题在于:

  

严重:Web应用程序[]使用类型为
的键创建了一个ThreadLocal       [java.lang.ThreadLocal](value [java.lang.ThreadLocal@f6d3223])和类型为[org.apache.commons.collections.map.ReferenceMap]的值(value [{WebappClassLoader]         背景:         委托:假       ---------->父类加载器:       java.net.URLClassLoader@5a07e868       =com.sun.org.apache.xerces.internal.util.XMLGrammarPoolImpl@5b758d75}])
  但是在Web应用程序停止时无法将其删除。线程将随着时间的推移而更新,以避免可能的内存泄漏。

我正在使用spring JasperReportsMultiFormatView,它在japser-view.xml文件中声明,我已经声明了我的报告和子报告数据源及其位置。

这是我的控制器:

@RequestMapping(value = "/download", method = RequestMethod.GET)
public ModelAndView doSalesMultiReport(HttpServletRequest request,@RequestParam("type") String type,ModelAndView modelAndView, ModelMap model) {
    List<StationReportBean> items = new ArrayList<StationReportBean>();
    StationReportBean item4 = new StationReportBean();
    item4.setId(1);
    item4.setReportType("Hourly");
    item4.setStationName("Delhi");
    item4.setDeviceId(1);
    items.add(item4);
    List<DeviceReportBean> beans = new ArrayList<DeviceReportBean>();
    DeviceReportBean bean1=new DeviceReportBean();
    bean1.setId(1);
    bean1.setHours("00:00-01:00");
    bean1.setVoltageFirstPhase(1.1);
    bean1.setVoltageSecondPhase(1.2);
    bean1.setVoltageThirdPhase(1.3);
    bean1.setVoltageAvg(1.4);
    bean1.setCurrentFirstPhase(5.6);
    bean1.setCurrentSecondPhase(7.8);
    bean1.setCurrentThirdPhase(9.3);
    bean1.setCurrentAvg(1.1);
    bean1.setLoadFirstPhase(75.6);
    bean1.setLoadSecondPhase(7.98);
    bean1.setLoadThirdPhase(91.3);
    bean1.setLoadAvg(1.81);
    bean1.setPowerFactorFirstPhase(54.6);
    bean1.setPowerFactorSecondPhase(7.98);
    bean1.setPowerFactorThirdPhase(97.3);
    bean1.setPowerFactorAvg(11.11);
    bean1.setNetRunHour(1.0);
    bean1.setNetWattHour(2.0);
    beans.add(bean1);
    JRDataSource datasource = new JRBeanCollectionDataSource(items);
    JRDataSource  subDatasource = new JRBeanCollectionDataSource(beans);
    model.addAttribute("Datasource", datasource);
    model.addAttribute("JasperCustomSubReportDatasource", subDatasource);
    try {
        BufferedImage image=ImageIO.read(request.getServletContext().getResource("/assets/img/favicon.png"));//when image is in webcontent

        model.addAttribute("logo", image );
    } catch (IOException e)  {
        e.printStackTrace();
    }
    model.addAttribute("format", type);
    modelAndView = new ModelAndView("multiReport", model);
    return modelAndView;
 }

此错误会降低我的开发环境。

是什么让它出错?

0 个答案:

没有答案