配置文件端到端同步方案

作者: 测试开发栈 | 来源:发表于2017-03-07 16:05 被阅读80次

无论是项目开发还是分布式软件自动化测试,为了增加系统的灵活性和可配置性,我们常常使用在程序中读取本地配置的方式去控制系统,从而减少系统的停服和部署次数,这个过程是如何实现的呢?

一、方案逻辑
具体实现逻辑详见下图:


Paste_Image.png

二、具体实现
考虑到灵活性,下面代码还可以为SyncConfig创建一个构造方法SyncConfig (String lastModifiedPath),为变量remoteLastModifiedPath 赋值。

public class SyncConfig {
    private static String remoteLastModifiedPath = "\\\\remoteHost\\SharedFolder\\TestConfig\\lastModified";
    private static long lastModified = 0L;
    
    public static void syncConfig(String remotePath, String localPath){
        
        File sharedFile = new File(remotePath); 
        if(! sharedFile.exists() || ! sharedFile.isFile()){
            System.out.println("远端配置文件不存在");
            return;
        }
        
        lastModified = Long.parseLong(new DataConfig(remoteLastModifiedPath).readProperties("lastModified"));
        if(sharedFile.lastModified() <= lastModified){
            System.out.println("远端配置文件未更新,无需同步");
            return;
        }
        
        File localBackupFile = new File(localPath + ".bak");
        if(localBackupFile.exists()){
            localBackupFile.delete();
        }
        
        File localFile = new File(localPath);
        
        if(localFile.exists()){
            localFile.renameTo(localBackupFile);
            if(CommonUtil.copyFile(remotePath, localPath)){
                System.out.println("本地配置文件更新成功");
                new DataConfig(remoteLastModifiedPath).writeProperties("lastModified", String.valueOf(sharedFile.lastModified()));
            }else{
                localBackupFile.renameTo(new File(localPath));
                
                if(localFile.exists()){
                    System.out.println("本地配置文件还原成功");
                }else{
                    System.err.println("本地配置文件还原失败");
                }
            }
            
        }else{
            System.err.println("本地配置文件("+ localPath +")出现异常");
        }
    }
}

三、调用方式
在程序初始化时或者测试初始化时调用同步方法

    @BeforeSuite
    public void initSuite(){
        String sharedPath = "\\\\remoteHost\\SharedFolder\\TestConfig\\config.properties";
        String localPath = System.getProperty("user.dir") + "/testConfig/config.properties";
        SyncConfig.syncConfig(sharedPath, localPath);
    }     

四、改进方法
考虑到网络传输速度和配置文件大小的因素,建议调用同步方法的操作在子线程中进行,提升用户体验。

  new Thread(new Runnable() {
        @Override
        public void run() {
            // TODO Auto-generated method stub
            SyncConfig.syncConfig(sharedPath, localPath);           
        }
    }).start();

PS: 更多原创技术好文,请关注下方公众号:


code_share.jpg

相关文章

  • 配置文件端到端同步方案

    无论是项目开发还是分布式软件自动化测试,为了增加系统的灵活性和可配置性,我们常常使用在程序中读取本地配置的方式去控...

  • ntp时间同步服务部署

    时间同步服务器1、服务端及客户端安装ntp软件 2、配置服务端软件(将主配置文件中原来的主配置文件进行注释) 然后...

  • 移动端同步方案

    飞地有用户写作的需求,所以积累了写作和数据同步的技术研究,这是第二篇数据同步,第一篇写作点此进入。 因为产品有草稿...

  • Debian9配置Sersync+rsync,自动同步

    Debian9配置Sersync+rsync 目标:将同步服务端的数据实时同步到客户端 同步客户端配置rsync ...

  • rsync 同步文件/备份文件

    需求 同步远程服务器指定文件夹 activity 到本地 方案 使用 rsync 同步工具 实施 服务端 开启 r...

  • Ubuntu16搭建NTP时间服务器

    服务端配置:1、安装chrony软件 2、修改配置文件 3、启动,查看状态,查看同步源 客户端配置:1、安装服务 ...

  • MR添加第三方依赖和文件

    问题描述 解决方案 步骤 在 Driver 端添加依赖 在 Task 端添加依赖(或配置文件) 代码方法1Conf...

  • springboot知识点(二)

    redis配置文件: JPA配置文件: mybatais配置: 调试模式 测试结论:在服务端处理同步发送的性能上,...

  • anki PC端与手机端同步

    1、anki PC 端 点击同步 2、AnkiDroid 手机端 点击同步

  • Thrift RPC Client 流程

    Thrift客户端有两种:同步客户端和异步客户端。 同步客户端 同步客户端比较简单,先看一下类图。 TServic...

网友评论

    本文标题:配置文件端到端同步方案

    本文链接:https://www.haomeiwen.com/subject/axvmgttx.html