JasperFillManager.fillReport 卡住,不报错不往后执行问题解决

公司的使用irport配置xml生成.jasper 后缀文件然后组织数据进行pdf生成。该项目window环境下执行不报错,放在liunx服务器有时候会遇到代码卡住在JasperFillManager.fillReport 在这一句不动的情况,及不报错抛出错误也不往后执行。排查问题毫无头绪。

今天又遇到此问题,经过排查解决了该问题以下是排查过程

1、项目本身是5.6.0的 jasperreports maven包配置,怀疑是版本过低存此问题,为了验证我建立了一个新项目,在网上找了一篇文字进行了初步集成代码配置如下

maven配置增加一下配置

<dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-pdfa</artifactId>
            <version>5.5.0</version>
        </dependency>
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itext-asian</artifactId>
            <version>5.2.0</version>
        </dependency>
        <dependency>
            <groupId>cn.lesper</groupId>
            <artifactId>iTextAsian</artifactId>
            <version>3.0</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>2.4.11</version>
        </dependency>
        <!-- jasperreports end-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
        </dependency>
        <dependency>
            <groupId>net.sf.jasperreports</groupId>
            <artifactId>jasperreports</artifactId>
            <version>6.11.0</version>
        </dependency>

测试样例代码

public static void main(String[] args) throws Exception {
        test();
    }
    public  static String test() throws JRException {

        Map map = (Map<String, Object>)new HashMap();
        List<Object> list = new ArrayList<>();
        String T1 = "1";
        String T2 = "2";
        String T3 = "3";
        String T4 = "4";// 余额
        BigDecimal T5 = new BigDecimal("0");
        log.error("取公共数据");

        for (int i = 0; i < 10; i++) {
            Irportbean detail=new Irportbean();
            detail.setL1("1");//抄表时间 thisCopyDate
            detail.setL2("2");//缴费日期 writeOffDate
            detail.setL3("3");//上期行至preto
            detail.setL4("4");//本期行至thisto
            detail.setL5("5");//实用水量practicalWater
            detail.setL6("6");//实收水量netReceiptsWater
            detail.setL7("7");//用水单价basicsFeeUnitPrice
            detail.setL8("8");//水费金额basicsFeeMoney
            detail.setL9("9");//违约金lateFee
            detail.setL10("已销账");//销账标志isWriteOff
            list.add(detail);
        }
        JRDataSource data = new JRBeanCollectionDataSource(list);
        map.put("beans", data);
        map.put("T1", "测试");//户号
        map.put("T2", T2);//表位号
        map.put("T3", T3);//户名
        map.put("T4", T4);//地址
        map.put("T5", T5); //余额
        log.error("---------------------------map :" + list.toString());

        // 3、打印PDF
        String imageName = UUID.randomUUID() + ".pdf";
        log.error("==========");
        log.error(PATH + "gr_water_list.jasper");
        log.error(IAMGE_PATH + imageName);

        JasperPrint print = JasperFillManager.fillReport(PATH + "gr_water_list.jasper", map, new JREmptyDataSource());
        JasperExportManager.exportReportToPdfFile(print,IAMGE_PATH+imageName);
        log.error("---------------------------getName :" +  print.getName());
        String   url = YUMIN + "JxReport/temp_image/" + imageName;
        log.error("---------------------------url :" + url);
        return url;
    }

该代码本地window执行OK,然后打包至问题服务器通过接口测试发现也能正常生成pdf,初步确认该文与服务器无关系,确认为版本问题。

确认是版本问题后进行了项目集成按照上面的配置集成到现有项目中打包测试。过程中还遇到两小问题

1、集成测试本地测试没问题,放到服务器发现还是不行,发现eclipse使用maven打包如果不事先更新maven并清理现有war的话它会把新版本的jar和老版本的jar一起打包至war中,需要清理项目maven。然后重新打包,现象:war启动后解压lib目录看新包和老jar是否同时存在,存在删除老的jar,重启项目发现问题解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值