通过java springboot实现阿里云dns动态解析_YZero_cn的博客-优快云博客https://blog.youkuaiyun.com/YZero_cn/article/details/120337681以上面的文章为基础,做了一些定时任务的逻辑改动。
问题
之前将定时任务设置为每小时执行一次,如果间隔时间内出现ipv6地址的变动,会导致一段时间内无法访问域名,而且如果这个jar包在不同的设备上同时执行,会造成域名解析在几个设备的地址之间跳动,典型情景:在电脑上做测试。
优化方法
将定时任务设置成每1分钟执行一次,同时加一道判断,只有满足条件时才会向阿里云服务器申请更改解析变动。
这里的思路是用服务器ping自己的域名,一旦该域名能ping通则跳出任务,只有当目标域名无法ping通后才将本机ipv6地址提供给dns服务商
核心代码:
@Autowired
private DDNS ddns;
/**
* 定时任务,每隔一分钟更新一次
*/
@Scheduled(cron = "0 0/1 * * * ? ")
public void pingTest(){
//判断域名是否能ping通
int timeOut = 3000 ;
//超时应该在3钞以上
boolean status = false;
try {
status = InetAddress.getByName("在这里填入你的域名").isReachable(timeOut);
} catch (IOException e) {
e.printStackTrace();
}
//域名记录与实际地址不符
if (!status){
//修改dns解析
ddns.go();
log.info("DNS记录与当前ipv6地址不符,重新定向解析");
} else{
log.info("dns解析记录与当前地址相同,无需操作");
}
}
springboot打包成jar之后在服务器上运行时没办法访问resource文件夹下的文件,所以这里直接将域名,token等值直接写死了,需要修改则需要直接用代码重新打包部署,这个后面还可以再优化一下