问题中的“模拟一个 /etc/hosts”只是举个例子,目的是如何实现如 hosts 文件一样自定义域名解析
在生产环境中有时需要修改域名 aaa.com 的解析 IP,目前知道有两种方式来实现:
1、修改生产主机的 /etc/hosts 文件
2、每次请求时将 Host 头改为想要的解析 IP
这两种方法都不够便捷,有没有另外一种方式可以在 Java 环境中定义一个域名的 IP,然后我可以随时方便的修改该域名的指向 IP?(除了自己搭建一个DNS)
可以用这个库 https://github.com/alibaba/java-dns-cache-manipulator/tree/master/library :
A simple 0-dependency thread-safe lib for setting dns programmatically without touching host file, make unit/integration test portable.
通过代码直接设置Java的DNS,支持JDK 6+,支持IPv6。
设置DNS,不需要业务代码调整,即对业务逻辑透明。
你要使用方式也是支持的:
支持在Java代码中编程的方式设置
可以用统一放在一个配置文件中,批量设置。
更多使用的说明可以看项目文档中的User Guide
库已经发到Maven中央库了,你可以直接引用:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>dns-cache-manipulator</artifactId>
<version>1.5.1</version>
</dependency>
不认同这种变换域名解析这种方案, 你应该更多的考虑如何避免这个方案, 通过其他途径来实现 @RunSN
项目文档的需求场景中说明了一些 可以/需要/不得不 这样做的需求场景。
@RunSN 简单说,刚开始我要写项目的需求 也是 被逼无奈的,哈哈~
这个项目还提供了一个命令行工具,可以直接修改/设置 运行中Java进程的DNS, https://github.com/alibaba/java-dns-cache-manipulator/blob/master/tool 。 使用说明见工程文档。
PS: 我是这个项目开发者,有什么问题 欢迎反馈,
为什么不发散思维一下哩, 一直想着 hosts 当然解决不了的, hosts 是没有这功能的, java 也没听说过这功能
建立一个 map
Map map = new HashMap();
map.set('test.com', '0.0.0.0');
要用的时候 get('test.com') 改的时候 set(xx,xx)
不认同这种变换域名解析这种方案, 你应该更多的考虑如何避免这个方案, 通过其他途径来实现