在查询开始前设置 Jena 的默认 HTTP 代理
了解 HttpEnv 面向整个 JVM 的默认客户端、其启动时机,以及可在 SERVICE 调用中覆盖它的客户端。
对于使用现代 JDK 技术栈的嵌入式 Jena 应用,在构建查询执行或启动工作线程之前,先建立一个共同的回退方案:
import java.net.InetSocketAddress;
import java.net.ProxySelector;
import org.apache.jena.http.HttpEnv;
var http = HttpEnv.httpClientBuilder()
.proxy(ProxySelector.of(
new InetSocketAddress("proxy.example.net", 8080)))
.build();
HttpEnv.setDftHttpClient(http);Jena 的构建器在添加选择器的同时保留其传输默认设置。对于使用获准的公共 SPARQL 端点且没有代理账户的嵌入式工作负载,HTTP 代理列表可以提供选择器所需的 HTTP 地址。这仍然是整个 JVM 共享的默认值,而不是按请求切换的开关。
| 操作 | 客户端选择顺序 |
|---|---|
| 普通 HTTP 查询构建器 | 显式客户端、基于 URL 的注册表匹配、HttpEnv 默认值 |
| 内置联合 SERVICE | 匹配的注册表客户端、查询上下文客户端、全局默认值 |
因此,本地或注册表覆盖可以使用另一条路由。HTTP 构建器在调用 build 时确定其客户端,并把该对象传入执行;之后再替换默认值不会重写已经构建的执行。
保持启动时的回退方案稳定。路由不同时,使用相应的本地/上下文/注册表接口。
独立的 Fuseki 服务器也需要其部署版本所支持的初始化运行方式。把这段 Java 代码放进文件并不会让该服务器执行它。