从classpath中读取文件
个人觉得使用Class.getResourceAsStream(path)
较为靠谱,Class.getResource(path)
在JBoss中使用,获取到的路径会有问题
|
|
对文件(目录)操作(JDK7以后)
使用java.nio.file.Files
、java.nio.file.Paths
、java.nio.file.Path
结合比较好
|
|
本地(内嵌式)DNS服务
参考资料:
Java DNS查询内部实现
Local Managed DNS (Java)
InetAddress类之创建新的InetAddress对象
问题:应用中通过域名或hostname访问外部应用,但dns服务器上又没有它们的ip映射关系
目的:开发一个内嵌式的DNS服务,可通过配置注册hostname和ip的映射关系
步骤:
在源代码的
META-INF/services
目录增加一个sun.net.spi.nameservice.NameServiceDescriptor
文件,内容为1io.jasonlu.learning.dnslookup.LocalManagedNameServiceDescriptorLocalManagedNameServiceDescriptor
的内容如下:1234567891011121314151617181920public class LocalManagedNameServiceDescriptor implements NameServiceDescriptor {public NameService createNameService() throws Exception {return new LocalManagedNameService();}public String getProviderName() {return "dnsljh";}public String getType() {return "dns";}public LocalManagedNameServiceDescriptor() {System.out.println("hello, you're in LocalManagedNameServiceDescriptor");}}
LocalManagedNameService
主要代码如下
在程序的启动参数上增加:
1-Dsun.net.spi.nameservice.provider.1=dns,dnsljh -Dsun.net.spi.nameservice.provider.2=default客户端示例
1234567891011public class DnsLookUpTest {public void testLookup() throws UnknownHostException {String googleHost = InetAddress.getByName("www.google.com").getHostAddress();System.out.println(googleHost); // www.google.com没有在managedAddress中,因此按默认方式通过外部DNS获取其对应ipString mockhost = InetAddress.getByName("mockhost").getHostAddress();// mockhost在managedAddress中,因此获取到其ip为10.1.1.1assertThat(mockhost, is("10.1.1.1"));}}