我有一个现有的基于Servlets的Java web应用程序。这是一个Eclipse项目,在Tomcat 10中运行。
到目前为止,应用程序还没有使用任何Java模块化/ JPMS。代码库从JDK 8开始,但现在使用JDK 17并工作。
现在,我有了一个添加XLSX文件导出的特性请求。为此,我想使用Apache的XSSF。
但是POI是一个很大的库,有很多封闭的罐子,我有点担心“污染”我的类路径。
关于“深度防御”,我不希望我的应用程序的Internet表面部分能够直接访问任何POI类或它的依赖项。例如,为了避免此类类可能被用于小工具链中。
我的XLSX导出特性的API基本上如下所示:
public class MyCustomDataTransferObject {
// ... some attributes with getters and setters
}
public class MyXLSXExportException extends Exception {
// ...
}
public interface MyXLSXExport {
byte[] createXLSXOutputFromData( MyCustomDataTransferObject bean )
throws MyXLSXExportException;
}
// That's all.我的主应用程序不应该访问其他任何东西!根本没有一个XSSF类。
我的第一个想法是:为XLSX导出编写一个微服务,并从我的主要应用程序(通过回环接口)使用HTTP(S)在内部访问它。
但是我想:这不是Java 9模块系统的一个很好的用例吗?
如果我在正确的轨道上:如何使我的非模块化主项目使用XLSX导出模块?我想XLSX导出模块将进入工作区中的一个新的专用Eclipse项目。XLSX导出模块项目获得一个module-info,在主项目的项目属性中,我必须将XLSX项目添加为模块路径依赖项。对吗?主项目本身需要一个module-info吗?在Tomcat中部署此设置需要考虑什么?你以前这么做过吗?有反对意见或其他想法吗?
发布于 2022-05-11 05:40:04
在走上在已经很复杂的事情( POI,更不用说应用程序的其他部分)基础上添加大量复杂性的路线之前,请考虑完全不使用POI。
如果您所做的只是在单个XLSX工作表中提供数据提要,那么您不需要处理POI。
我有几个(内部)项目,它们使用POI导出XLSX数据,并且正在处理另一个项目,并且热衷于避免使用POI (出于同样的原因,您希望封装它,另外还有一个事实,即当数据进入时,我想源源不断地输出)。我遇到了一个问题:How to create and write to Excel file (.xlsx)?,并受到了产生这个问题的答案的启发:https://github.com/Yaytay/streaming-xlsx-writer
它所做的就是在数据输入时将带有单个工作表的XLSX文件流到OutputStream中。这里有一些基本的格式(如果您需要更多的话,可以随意询问)。内存开销几乎为零,并且没有依赖项。
这是非常新的,所以我还没有战斗测试它,但如果你发现任何故障,我会修复它,因为我需要它为我的项目工作:)。
https://stackoverflow.com/questions/72194322
复制相似问题