Problem: Setting spring.kafka.bootstrap-servers to PLAINTEXT://127.0.0.1:60643 leads to NumberFormatException due to input string not being a host:port pair but protocol://host:port.
Exception:
Caused by: java.lang.NumberFormatException: For input string: "//127.0.0.1:60643"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:67)
at java.base/java.lang.Integer.parseInt(Integer.java:654)
at java.base/java.lang.Integer.parseInt(Integer.java:786)
at org.springframework.boot.autoconfigure.kafka.PropertiesKafkaConnectionDetails.asNode(PropertiesKafkaConnectionDetails.java:72)
at java.base/java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:197)
at java.base/java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1625)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:575)
at java.base/java.util.stream.AbstractPipeline.evaluateToArrayNode(AbstractPipeline.java:260)
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:616)
at java.base/java.util.stream.ReferencePipeline.toArray(ReferencePipeline.java:622)
at java.base/java.util.stream.ReferencePipeline.toList(ReferencePipeline.java:627)
at org.springframework.boot.autoconfigure.kafka.PropertiesKafkaConnectionDetails.asNodes(PropertiesKafkaConnectionDetails.java:63)
at org.springframework.boot.autoconfigure.kafka.PropertiesKafkaConnectionDetails.getBootstrapNodes(PropertiesKafkaConnectionDetails.java:40)
at org.springframework.boot.autoconfigure.kafka.PropertiesKafkaConnectionDetails.bootstrapNodes(PropertiesKafkaConnectionDetails.java:59)
at org.springframework.boot.autoconfigure.kafka.PropertiesKafkaConnectionDetails.getProducerBootstrapNodes(PropertiesKafkaConnectionDetails.java:50)
at org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration.applyKafkaConnectionDetailsForProducer(KafkaAutoConfiguration.java:203)
at org.springframework.boot.autoconfigure.kafka.KafkaAutoConfiguration.kafkaProducerFactory(KafkaAutoConfiguration.java:125)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:139)
... 126 common frames omitted
Observation: as noted by @philwebb while debugging it together, the parsing and the Node abstraction is unnecessary and the string is being glued back in KafkaAutoConfiguration#nodesToStringList.
Version: Spring Boot 3.1.0-RC1
Comment From: wilkinsona
Duplicates https://github.com/spring-projects/spring-boot/issues/34770.