java - 并行读取大型 XSLT 字符串

标签 java file xslt parallel-processing

我有一个很大的 XSLT 字符串,用于将 XML 转换为 json。我正在 dropwizard Web 服务中执行此操作,其中非常需要并发性。当我将此 XSLT 字符串存储在文件中时,它会导致所有 Web 服务线程从文件系统按顺序访问该文件(从而延迟执行)。

如果我尝试将该 XSLT 存储为 java 字符串,则会收到 constant string too long 异常。存储此 XSLT 以便我的线程可以并行访问它的最佳方式是什么?

最佳答案

如果 XSLT 源确实那么大,您可能应该将其存储在一个文件中,例如作为类路径资源,并且只加载和解析一次:

private static Templates largeTemplate;

初始化使用(仅一次):

try (InputStream in = Test.class.getResourceAsStream("path/to/large.xslt")) {
    TransformerFactory transformerFactory = TransformerFactory.newInstance();
    largeTemplate = transformerFactory.newTemplates(new StreamSource(in));
}

然后对于每个线程:

Transformer transformer = largeTemplate.newTransformer();
// Use transformer here

关于java - 并行读取大型 XSLT 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50011740/

相关文章:

java - Java 类可以在运行时向自身添加方法吗?

java - 在 Solr 中索引约 1TB 富文本文档的最佳方法是什么?

java - 如何从在 dockerized Tomee 服务器上运行的应用程序成功连接到 Dockerized DB2 数据库/服务器 - 两个容器都使用 jdk10?

java - 在 Java 中将接口(interface)转换为类

android - 如何使用 flutter "File Class"删除 android 上的文件?

c - 简单的程序在打开文件时导致段错误

xslt - for-each 的谓词求值是否等于 select 的结果

xml - 使用 XSLT 更改单个属性

xml - XSLT 函数格式-数字不显示零

file - 批处理 : Remove file extension