这是我的代码:
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("http://127.0.0.1:8081/"))
.header("Host", "test.example.com")
.build();
client.send(request, HttpResponse.BodyHandlers.ofString());
Run Code Online (Sandbox Code Playgroud)
结果我看到上面的代码发送:
GET / HTTP/1.1
Connection: Upgrade, HTTP2-Settings
Content-Length: 0
Host: 127.0.0.1:8081
HTTP2-Settings: AAEAAEAAAAIAAAABAAMAAABkAAQBAAAAAAUAAEAA
Upgrade: h2c
User-Agent: Java-http-client/10
Host: test.example.com
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它会发送两个Host标头(URI和我指定的Host标头),但我希望它发送我指定的标头,而不是URI中的标头.这个客户有可能吗?
编辑:在Java 11中,它变得更糟(你需要将client.send行改为:)client.send(request, HttpResponse.BodyHandlers.ofString());:
java.lang.IllegalArgumentException: restricted header name: "Host"
Run Code Online (Sandbox Code Playgroud)
如何自定义该标头(测试虚拟主机所需)?
我也试过setHeader并得到完全相同的问题(双头Host或异常).
编辑:我报告了一个JDK错误.
我正在将项目从Java 8迁移到Java 11,并且java 9中引入的模块化让我头疼.情侣罐有相同的包,但不同的类.这给了我错误
module SomeModule reads package my.package from both ModuleA and ModuleB
Run Code Online (Sandbox Code Playgroud)
我想知道如何处理这样的情况,因为并非所有的罐子都在我的控制之下,重构不是解决方案.
有没有办法让Java类公开但只公开一个JAR文件?AKA,它不是私有包,而是公共包,但它不是公共JAR?
说我有这样的结构:
project/
package1/
One.java
package2/
Two.java
package3/
Three.java
Run Code Online (Sandbox Code Playgroud)
由于3 .java文件在不同的包中,我需要公开.但有没有办法让它们只对包含该项目的JAR公开?这样如果另一个项目导入JAR,它就看不到某些公共类/字段?
当我使用OpenJDK 11(在Windows 10上为Zulu发行版)编译并运行以下非常简单的Java程序时:
public class GCTest {
public static void main(String[] args) {
System.out.println("Free memory before garbage collection: " + Runtime.getRuntime().freeMemory());
Runtime.getRuntime().gc();
System.out.println("Free memory after garbage collection: " + Runtime.getRuntime().freeMemory());
}
}
Run Code Online (Sandbox Code Playgroud)
看起来垃圾回收正在减少可用内存量:
Free memory before garbage collection: 266881496
Free memory after garbage collection: 7772200
Run Code Online (Sandbox Code Playgroud)
当我使用Oracle Java 8运行它时,不会发生这种情况:
Free memory before garbage collection: 254741016
Free memory after garbage collection: 255795064
Run Code Online (Sandbox Code Playgroud)
这是为什么?
I want to createNewFile with a path but I got an IOException. The question is, the detailed message cannot be interpreted, I can only see a bunch of question marks.
I am with Windows 10 originally in Spanish, but with Chinese language pack installed. The java language already set to en and file encoding UTF-8:
java -version
Picked up _JAVA_OPTIONS: -Duser.country=US -Duser.language=en -Dfile.encoding=UTF-8
openjdk version "11" 2018-09-25
OpenJDK Runtime Environment 18.9 (build 11+28)
OpenJDK 64-Bit Server VM 18.9 (build …Run Code Online (Sandbox Code Playgroud) 目前 Pentaho Kettle (v.9.1) 官方只支持 Java 8。这对我们来说是一个问题,因为我们正在维护一个需要 Java 11 的插件,因为一个需要 Java 11 的基本库。有没有人有关于路线图的详细信息迁移到 Java 11。我只能找到 Java 11 在路线图上的一些旧信息,但没有找到何时可用于 Kettle。
我们当前的解决方案是使用 Java 11。当从 bat/sh 文件中删除 JAVA_ENDORSED_DIRS 时,您可以运行 Spoon。但这不是最好的解决方案,因为应用程序不完全兼容,我们遇到了越来越多的问题。
也欢迎其他想法或解决方案。
由于在我的 Macbook Pro(最新操作系统等)上升级到 java 11,编译项目似乎经常长时间锁定整个文件系统。还有其他人有这个问题吗?任何想法如何调试它?
更新:我dtruss在这个过程中做了一个,我看到了像这样无休止的输出。我不知道这是否重要。
gettimeofday(0x700001D00D98, 0x0, 0x0) = 0 0
gettimeofday(0x7000011DCE18, 0x0, 0x0) = 0 0
psynch_cvwait(0x7F8EF6417C10, 0x89A0100089B00, 0x0) = -1 316
gettimeofday(0x700001D00D98, 0x0, 0x0) = 0 0
psynch_cvwait(0x7F8EF6417C10, 0x89B0100089C00, 0x0) = -1 316
gettimeofday(0x700001D00D98, 0x0, 0x0) = 0 0
psynch_cvwait(0x7F8EF6417C10, 0x89C0100089D00, 0x0) = -1 316
gettimeofday(0x700001D00D98, 0x0, 0x0) = 0 0
psynch_cvwait(0x7F8EF6417C10, 0x89D0100089E00, 0x0) = -1 316
gettimeofday(0x700001D00D98, 0x0, 0x0) = 0 0
psynch_cvwait(0x7F8EF6417C10, 0x89E0100089F00, 0x0) = -1 316
Run Code Online (Sandbox Code Playgroud)
只是无休止地调用它,然后每隔一段时间:
stat64("<xxxx>.class\0", 0x700000CCBF30, 0x0) = 0 …Run Code Online (Sandbox Code Playgroud) 假设我使用的是Java 11javac,但我使用--source和--target选项设置为1.8以便我的源代码将被视为 Java 8 并且输出.class文件将与 Java 8 兼容。我的目标是生成.class可以运行的文件一个 Java 8 JVM。
假设我正在编译以下 Java 8 代码:
import java.nio.ByteBuffer;
…
ByteBuffer byteBuffer = …; //init somehow
byteBuffer.flip(); //what ends up in the `.class` file?
Run Code Online (Sandbox Code Playgroud)
问题是:Java 11 应该javac在.class文件中放什么来链接byteBuffer.flip()方法调用?在回答之前,请考虑以下问题:
ByteBuffer和Java 11ByteBuffer都没有flip()在ByteBuffer级别声明方法。ByteBuffer是 的直接子类Buffer。两个版本的API 中都声明了Java 8Buffer.flip()和Java 11Buffer.flip()Buffer …我将 Spring Boot 应用程序从 Java 8 和 tomcat 8 升级到了 java 11 和 tomcat 9。除了我在列表上使用并行流的部分外,一切似乎都运行良好。
list.addAll(items
.parallelStream()
.filter(item -> !SomeFilter.isOk(item.getId()))
.map(logic::getSubItem)
.collect(Collectors.toList()));
Run Code Online (Sandbox Code Playgroud)
前一部分代码过去在 Java 8 和 Tomcat 8 上工作得很好,但在Java 9 改变了如何使用 Fork/Join 公共池线程加载类之后,将系统类加载器作为它们的线程上下文类加载器返回。
我知道在后台并行流使用 ForkJoinPool 并且我创建了一个自定义 bean 类,但仍然没有被应用程序使用。很可能是因为它们可能是在这个 bean 之前创建的。
@Bean
public ForkJoinPool myForkJoinPool() {
return new ForkJoinPool(threadPoolSize, makeFactory("APP"), null, false);
}
private ForkJoinPool.ForkJoinWorkerThreadFactory makeFactory(String prefix) {
return pool -> {
final ForkJoinWorkerThread worker = ForkJoinPool.defaultForkJoinWorkerThreadFactory.newThread(pool);
worker.setName(prefix + worker.getPoolIndex());
worker.setContextClassLoader(Application.class.getClassLoader());
return worker;
};
}
Run Code Online (Sandbox Code Playgroud)
最后,我还尝试将它包装在我的 ForkJoinPool 实例周围,但它是异步完成的,我不想这样做。我也不想使用提交和获取,因为这意味着我必须用 try/catch …
为什么这段代码在 Java 8 和 Java 11 中表现不同?
private static String test2() {
CompletableFuture
.runAsync(() -> IntStream.rangeClosed(1, 20).forEach(x -> {
try {
Thread.sleep(500);
System.out.println(x);
} catch (InterruptedException e) {
e.printStackTrace();
}
}));
return "Finish";
}
Run Code Online (Sandbox Code Playgroud)
我希望它打印完成,然后以 500 毫秒的间隔打印从 1 到 20 的数字,然后停止执行,它在 Java 8 中正常工作。
然而,当我在 Java 11 上运行完全相同的方法时,它打印 Finish 并终止,而没有调用 runAsync(...) 代码。我设法通过添加这样的 ExecutorService 来启动它
private static String test2() {
final ExecutorService executorService = Executors.newFixedThreadPool(10);
CompletableFuture
.runAsync(() -> IntStream.rangeClosed(1, 10).forEach(x -> {
try {
Thread.sleep(500);
System.out.println(x);
} catch (InterruptedException e) { …Run Code Online (Sandbox Code Playgroud) java ×10
java-11 ×10
asynchronous ×1
azul-zulu ×1
http2 ×1
ioexception ×1
java-10 ×1
java-8 ×1
java-9 ×1
java-module ×1
java-platform-module-system ×1
java-stream ×1
kettle ×1
macos ×1
maven ×1
spring ×1