我在没有任何Mongo bean实例化问题的情况下使用了Java8和Spring Data MongoDb Reactive的Javamaven项目。目前,我正在尝试将同一项目从Java8项目升级到Java11(jvm 11.0.8 10-LTS)。我更新的Spring Boot版本是2.5.6,带有Jetty服务器(9.4.44. v20210927),相应的Mongo反应性版本基于2.5.6。当Spring尝试创建与mongo相关的bean以在上下文中添加它们时,会出现以下错误:
Unable to support mongodb+srv// style connections as the ‘com.sun.jndi.dns.DnsContextFactory’ "
+ "class is not available in this JRE. A JNDI context is required for resolving SRV records
除此之外,我尝试了以下方法:
添加设置属性的jndi.properties文件
<代码>java。命名。供应商。url=dns:
将参数添加到maven编译器插件
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
<configuration>
<release>11</release>
<compilerArgs>
<arg>--add-exports</arg>
<arg>jdk.naming.dns/com.sun.jndi.dns=java.naming</arg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
升级至与java 11兼容的最新jetty server版本
<jetty.version>9.4.44.v20210927</jetty.version>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-webapp</artifactId>
<version>${jetty.version}</version>
<scope>provided</scope>
</dependency>
你能给我一个解决办法吗?
我认为您实际上不必添加--add-export
。如果您查看MongoDBJava驱动程序代码,您会看到它已经在添加dns:
这是公关https://github.com/mongodb/mongo-java-driver/pull/554
这可能与JVM有关,但很难证明这一点。您可以使用OpenJDK 11在docker容器上运行它并查看吗?还是不同的版本?
/*
It's unfortunate that we take a runtime dependency on com.sun.jndi.dns.DnsContextFactory.
This is not guaranteed to work on all JVMs but in practice is expected to work on most.
*/
private static InitialDirContext createDnsDirContext() {
Hashtable<String, String> envProps = new Hashtable<String, String>();
envProps.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.dns.DnsContextFactory");
envProps.put(Context.PROVIDER_URL, "dns:");
try {
return new InitialDirContext(envProps);
} catch (NamingException e) {
throw new MongoClientException("Unable to support mongodb+srv// style connections as the 'com.sun.jndi.dns.DnsContextFactory' "
+ "class is not available in this JRE. A JNDI context is required for resolving SRV records.", e);
}
}
}
https://github.com/mongodb/mongo-java-driver/blob/master/driver-core/src/main/com/mongodb/internal/dns/DefaultDnsResolver.java
在下面的java代码中,我正在进行DNS SRV记录查找,以解析给定域名的目标域名和相关端口,例如root@1000000000.blubluzone.com.用/HERE/below表示的查找函数以某种方式返回null,我无法获得查询结果(即记录数组为null)。因此,当在for循环中访问记录数组时,将引发空指针异常。 你认为我缺少什么来让下面的代码工作。我正在使用dnsjava,相关的API
在Android上,我想通过使用服务名称来查找记录列表。我尝试过像dnsjava和jmdns这样的api,但都返回了空的结果。我遇到了类似的问题,但也没有人回答过: 在 Android 上解析 DNS SRV 记录的轻量级方法
相当意外的是,我在谷歌搜索中似乎找不到这个问题的答案。 SRV记录集中有多少记录太多? 10,50 100? 如果我想提供一个在同一物理位置的50台服务器之间保持平衡的单一主机名,如何做到最好? 如何将其扩展到100台服务器?
在Android上执行SRV记录查找的最节省资源的方法是什么,例如在XMPP客户端(如Yaxim)中? null 编辑:提供DNSSEC验证/DANE证书查询的奖励积分。
我正在构建一个自定义DNS服务器,除其他外,它提供记录以及相关的和记录。我可以验证直接查询服务器是否返回预期的答案: 然而,当通过我的ISPs解析器(或任何公共解析器,如谷歌的8.8.8.8)查询时,我得到的答案是空的: 查询立即返回,我可以看到我的服务器接收到一个传入查询,但它是空的。解析程序剥离和其他答案是已知的行为吗?如果是这种情况,为什么查询被转发到我的服务器?或者是错误在我这边,服务器只
有一种方法来检索域(和子域)的DNS记录的所有(TXT)条目? 我的目标是验证我的域的配置:www.rosposhop。com中,我为某些子域正确设置了多个SPF和DKIM记录 (因此我总共有5个TXT项目) 现在,如果我用或提问,我只得到了第一个TXT项目,而我应该得到TXT项目的完整列表。 为什么我错了? 顺便说一句,如果我要求惩罚性的子域名,现在我又得到了第一个条目: 返回: 再一次,我没有