英文:
Pulsar Spring Boot Cannot get DNS TTL settings from sun.net.InetAddressCachePolicy
问题
I am trying to initialize PulsarClient in spring-boot's configuration class using the following code but getting
Java Details:
<properties>
<java.version>20</java.version>
<pulsar.version>3.0.0</pulsar.version>
<spring.boot.version>3.1.0</spring.boot.version>
</properties>
@Configuration
public class PulsarConfiguration {
@Bean
public PulsarClient pulsarClient() throws PulsarClientException {
return PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build();
}
}
Error:
Cannot get DNS TTL settings from sun.net.InetAddressCachePolicy class
java.lang.IllegalAccessException: class org.apache.pulsar.common.util.netty.DnsResolverUtil cannot access class sun.net.InetAddressCachePolicy (in module java.base) because module java.base does not export sun.net to unnamed module @6069db50
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394) ~[na:na]
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:709) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.pulsar.common.util.netty.DnsResolverUtil.<clinit>(DnsResolverUtil.java:46) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.createAddressResolver(ConnectionPool.java:159) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.lambda$new$1(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:95) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:90) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:196) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:153) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ClientBuilderImpl.build(ClientBuilderImpl.java:63) ~[pulsar-client-3.0.0.jar:3.0.0]
at in.silentsudo.springbootmongodbdatagenerator.PulsarConfiguration.pulsarClient(PulsarConfiguration.java:16) ~[classes/:na]
Ref:
Found a thread here https://github.com/apache/pulsar/issues/20282, but I do not wish to downgrade, thank you.
英文:
I am trying to initialize PulsarClient in spring-boot's configuration class using the following code but getting
Java Details:
<properties>
<java.version>20</java.version>
<pulsar.version>3.0.0</pulsar.version>
<spring.boot.version>3.1.0</spring.boot.version>
</properties>
@Configuration
public class PulsarConfiguration {
@Bean
public PulsarClient pulsarClient() throws PulsarClientException {
return PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build();
}
}
#Error:
Cannot get DNS TTL settings from sun.net.InetAddressCachePolicy class
java.lang.IllegalAccessException: class org.apache.pulsar.common.util.netty.DnsResolverUtil cannot access class sun.net.InetAddressCachePolicy (in module java.base) because module java.base does not export sun.net to unnamed module @6069db50
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394) ~[na:na]
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:709) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.pulsar.common.util.netty.DnsResolverUtil.<clinit>(DnsResolverUtil.java:46) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.createAddressResolver(ConnectionPool.java:159) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.lambda$new$1(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:95) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:90) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:196) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:153) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ClientBuilderImpl.build(ClientBuilderImpl.java:63) ~[pulsar-client-3.0.0.jar:3.0.0]
at in.silentsudo.springbootmongodbdatagenerator.PulsarConfiguration.pulsarClient(PulsarConfiguration.java:16) ~[classes/:na]
#Ref:
Found a thread here https://github.com/apache/pulsar/issues/20282, but I do not wish to downgrade, thank you.
</details>
# 答案1
**得分**: 1
This is unavoidable as of JDK17 and the only way I know to get rid of the warning is to `add-opens` at JVM launch time. By the time we are in the Java client there is nothing that can be done (see [this article](https://docs.oracle.com/en/java/javase/17/migrate/migrating-jdk-8-later-jdk-releases.html#GUID-12F945EB-71D6-46AF-8C3D-D354FD0B1781) for more info on `add-opens`). As such, the only "downgrade" would be to go back to a lower JDK **OR** set the `add-opens` at JVM launch time. Here is an example of where we set it in [spring-pulsar](https://github.com/spring-projects/spring-pulsar/commit/cd8adafa079cfdfc9aa6a523d68db0906b22da83).
**TIP:** It looks like you are constructing the client yourself. I am not sure if you are using `spring-pulsar` or not, but when using `spring-pulsar` and `spring-boot`, the client is [automatically configured for you](https://docs.spring.io/spring-pulsar/docs/current-SNAPSHOT/reference/html/#pulsar-client).
<details>
<summary>英文:</summary>
This is unavoidable as of JDK17 and the only way I know to get rid of the warning is to `add-opens` at JVM launch time. By the time we are in the Java client there is nothing that can be done (see [this article](https://docs.oracle.com/en/java/javase/17/migrate/migrating-jdk-8-later-jdk-releases.html#GUID-12F945EB-71D6-46AF-8C3D-D354FD0B1781) for more info on `add-opens`). As such, the only "downgrade" would be to go back to a lower JDK **OR** set the `add-opens` at JVM launch time. Here is an example of where we set it in [spring-pulsar](https://github.com/spring-projects/spring-pulsar/commit/cd8adafa079cfdfc9aa6a523d68db0906b22da83).
**TIP:** It looks like you are constructing the client yourself. I am not sure if you are using `spring-pulsar` or not, but when using `spring-pulsar` and `spring-boot`, the client is [automatically configured for you](https://docs.spring.io/spring-pulsar/docs/current-SNAPSHOT/reference/html/#pulsar-client).
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论