Spring开机,无法读取文件,启动时使用jar包

Spring boot, The file can not be read, Use jar package when starting

Spring开机,无法读取文件,启动时使用jar包。 当我使用.war启动方式一切正常

这是war maven pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <configuration>
        <nonFilteredFileExtensions>
            <nonFilteredFileExtension>xls</nonFilteredFileExtension>
            <nonFilteredFileExtension>xlsx</nonFilteredFileExtension>
            <nonFilteredFileExtension>p12</nonFilteredFileExtension>
        </nonFilteredFileExtensions>
    </configuration>
</plugin>

但使用java -jar

我想从 java -jar 开始,现在我需要做什么? spring 引导版本 1.4.4

public void generater(HttpServletResponse response, boolean testMode) {
        ExcelTemplateEnum excelTemplate = this.exportTemplate();
        FileInputStream is = null;
        Workbook workbook = null;
        try {
            String templateFilePath = this.getTemplateFilePath(excelTemplate);
            URL url = ExeclExportHandler.class.getClassLoader().getResource(templateFilePath);
            is = new FileInputStream(url.getFile());
            ExcelTransformer transformer = this.getExcelTransformer();
            // 渲染导出数据
            if (isMultipleBeans()) {
                List<Map<String, Object>> data = this.renderDataList();
                this.checkExportParam(data);
                workbook = transformer.transform(is, getTemplateSheetNamesList(), getSheetNamesList(), data);
            } else {
                Map<String, Object> data = this.renderData();
                this.checkExportParam(data);
                workbook = transformer.transform(is, data);
            }
            if (testMode) {
                ...
            } else {
                ExcelHelper.setExcelHeader(response, excelTemplate.outname());
                workbook.write(response.getOutputStream());
                response.flushBuffer();
            }
        } catch (Exception e) {
            ...
        } finally {
            IOUtils.closeQuietly(is, workbook);
        }
    }

error line 75

    is = new FileInputStream(url.getFile());

您必须通过 Class.getResourceAsStream() 访问资源,因为您无法访问打包在 jar 中的文件:

is = this.getClass().getResourceAsStream(templateFilePath)

如果它与 war 一起工作,那只是运气,因为你的 servlet/J2EE-container 似乎解压了你的 war...但并非所有容器都是这种情况(由于是否解压 war 取决于容器的规范)。意味着使用不同的容器你也会得到 war.

的异常