zoukankan      html  css  js  c++  java
  • 简单ddns的实现

    coredns +

    package org.rx.service;
    
    import com.alibaba.fastjson.JSON;
    import com.alibaba.fastjson.JSONObject;
    import lombok.RequiredArgsConstructor;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.commons.io.FileUtils;
    import org.rx.common.AppConfig;
    import org.rx.core.Tasks;
    import org.rx.net.http.HttpClient;
    import org.springframework.stereotype.Service;
    
    import javax.annotation.PostConstruct;
    
    import java.nio.charset.StandardCharsets;
    
    import static org.rx.core.Contract.eq;
    import static org.rx.core.Contract.quietly;
    
    @Slf4j
    @Service
    @RequiredArgsConstructor
    public class ScheduleService {
        private final AppConfig config;
        private volatile String lastIp;
    
        @PostConstruct
        public void init() {
            Tasks.schedule(() -> {
                HttpClient client = new HttpClient();
    
                quietly(() -> {
                    String url = "https://api.myip.com";
                    JSONObject json = JSON.parseObject(client.get(url));
                    if (!eq(lastIp = json.getString("ip"), lastIp)) {
                        log.info("refresh dns db");
                        FileUtils.writeStringToFile(config.getDnsDb(), String.format("f-li.cn.		IN	SOA dns.f-li.cn. rx.f-li.cn. 2020020414 7200 3600 1209600 3600
    " +
                                "cloud.f-li.cn.	IN	A	103.126.103.83
    " +
                                "v.f-li.cn.		IN	A	%s
    ", lastIp), StandardCharsets.UTF_8, false);
                    }
                });
            }, config.getJobDelaySeconds() * 1000);
        }
    }

    package org.rx.service;
    import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import lombok.RequiredArgsConstructor;import lombok.extern.slf4j.Slf4j;import org.apache.commons.io.FileUtils;import org.rx.common.AppConfig;import org.rx.core.Tasks;import org.rx.net.http.HttpClient;import org.springframework.stereotype.Service;
    import javax.annotation.PostConstruct;
    import java.nio.charset.StandardCharsets;
    import static org.rx.core.Contract.eq;import static org.rx.core.Contract.quietly;
    @Slf4j@Service@RequiredArgsConstructorpublic class ScheduleService {    private final AppConfig config;    private volatile String lastIp;
        @PostConstruct    public void init() {        Tasks.schedule(() -> {            HttpClient client = new HttpClient();
                quietly(() -> {                String url = "https://api.myip.com";                JSONObject json = JSON.parseObject(client.get(url));                if (!eq(lastIp = json.getString("ip"), lastIp)) {                    log.info("refresh dns db");                    FileUtils.writeStringToFile(config.getDnsDb(), String.format("f-li.cn. IN SOA dns.f-li.cn. rx.f-li.cn. 2020020414 7200 3600 1209600 3600 " +                            "cloud.f-li.cn. IN A 103.126.103.83 " +                            "v.f-li.cn. IN A %s ", lastIp), StandardCharsets.UTF_8, false);                }            });        }, config.getJobDelaySeconds() * 1000);    }}

  • 相关阅读:
    lombok 下的@Builder注解用法
    (springboot)自定义Starter
    各种 Spring-Boot-Starters系列 介绍
    MQ的使用场景
    SpringBoot中使用rabbitmq,activemq消息队列和rest服务的调用
    RPC原理详解
    Java性能优化的50个细节
    thinkphp3.2.2有预览的多图上传
    关于php中的exec命令
    关于thinkphp3.1无法加载模块解决办法
  • 原文地址:https://www.cnblogs.com/Googler/p/14088474.html
Copyright © 2011-2022 走看看